Что-то не так с этой функцией электронной почты? - PullRequest
0 голосов
/ 08 мая 2019

Я написал функцию отправки электронного письма с подтверждением для хобби-приложения, над которым я работаю.Я думал, что все настроил правильно, но я получаю следующую ошибку при вызове функции:

2019-05-08 02:43:30 Connection failed. Error #2: failed loading cafile stream: `C:\xampp\apache\bin\curl-ca-bundle.crt' [C:\Users\Michael\Desktop\InviteMe Application\vendor\phpmailer\src\SMTP.php line 405] SMTP Error: Could not connect to SMTP host.

Я уже настроил свою учетную запись gmail, чтобы менее безопасные приложения моглиполучить доступ к учетной записи, и у меня сгенерирован пароль.

Я попытался прочитать документацию по устранению неполадок для библиотеки, которую я использую, но не смог найти ничего, что решало бы конкретную проблему, с которой я столкнулся.

Вот функция электронной почты:

function send_confirmation_email($name, $email, $user_id) {
    $confirmationUrl = generate_confirmation_url($user_id);
    $body = "";
    $body .= "<html><body>";
    $body .="<h1>Confirm your account</h1>";
    $body .= "<p>Follow the link below to confirm your account:</p>";
    $body .= "<a href='" . $confirmationUrl . "'>confirm account</a>";

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 3; //debugging purposes
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->Username = "invitemedemo@gmail.com";
    $mail->Password = "password";
    $mail->setFrom('invitemedemo@gmail.com', "InviteMe");
    $mail->addAddress($email, $name);
    $mail->Subject = "Confirm Account";
    $mail->Body = $body;
    $mail->isHTML(true);

    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
        return false;
    } else {
        return true;
    }
}

Вместо того, чтобы отправлять электронное письмо, я вижу ошибку, которую я вставил выше.

1 Ответ

0 голосов
/ 08 мая 2019

Проверьте службу электронной почты smtp.

Если у вас есть MAC OS, узнайте, как включить postfix для Gmail SMTP, используя вашу учетную запись gmail, по адресу: https://gist.github.com/loziju/66d3f024e102704ff5222e54a4bfd50e

Использование ссылки на Ubuntu Linux: https://gist.github.com/adamstac/7462202

Проверьте настройки PHP в файле php.ini для активной версии php, которую вы используете.т.е. используя MAMP для MAC OS, перейдите в Applications -> MAMP -> conf -> php7.0.32 (должна быть активная версия, которую вы используете, поэтому, если вы используете php 5.3.14, перейдите в этот каталог) -> php.ini

Отредактируйте файл php.ini с помощью:

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well 
(default: "sendmail -t -i").
;sendmail_path = sendmail -t -i -f example@gmail.com
sendmail_path = "env -i /usr/sbin/sendmail -t -I"

Перезапустите apache2 после обновления файла php.ini.

При использовании MAC OS для остановки и перезапуска почтыservice: sudo postfix stop && sudo postfix start sudo postfix reload

Тестовое письмо Отправить тестовое электронное письмо с терминала CLI:

echo "Test sending email from Postfix" | mail -s "Test Postfix" example@gmail.com

В качестве альтернативы я могу отправить тестовое сообщение изтерминальный CLI, использующий это:

echo "test message" | sendmail -v example@gmail.com

Проверка ошибок для sendmail с помощью команды терминала CLI:

mailq

Вы можете протестировать функцию SMTP с помощью php, например:

<?php
    // testemail.php
    $to_email = 'example@gmail.com';
    $subject = 'Testing PHP Mail';
    $message = 'This mail is sent using the PHP mail function';
    $message = wordwrap($message, 70);
    $headers = 'From: yoursending@email.com';
    mail($to_email,$subject,$message,$headers);
    $mail = mail($to_email,$subject,$message,$headers);
    if ($mail) { echo "Thank you for using mail";}
    else { echo "Mail sending failed.";}
    ini_set('display_errors',1);
?>
...