此电子邮件功能有问题吗?

时间:2019-05-08 02:56:28

标签: php email phpmailer

我编写了一个功能,可以为正在使用的业余应用发送确认电子邮件。我以为我可以正确设置所有内容,但是调用该函数时出现以下错误:

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 :(得分:-2)

验证您的smtp电子邮件服务。

如果您使用的是MAC OS,请访​​问https://gist.github.com/loziju/66d3f024e102704ff5222e54a4bfd50e

,了解如何使用您的gmail帐户为Gmail SMTP启用后缀。

使用Ubuntu Linux参考:https://gist.github.com/adamstac/7462202

检查php.ini文件中的PHP设置以获取正在使用的活动php版本。 即使用MAC OS的MAMP,>应用程序-> 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"

更新php.ini文件后重新启动apache2。

如果使用MAC OS停止并重新启动邮件服务: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

使用终端CLI命令检查sendmail的错误:

mailq

您可以使用php测试SMTP功能,例如:

<?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);
?>