使用 PHPMailer 通过 SMTP 发送电子邮件

2022-01-17 00:00:00 smtp smtp-auth php phpmailer

我正在尝试使用 PHPMailer 发送 SMTP 电子邮件,但我不断收到此错误消息,有什么办法可以摆脱它吗?
我正在尝试通过端口 465 上的 SSL 进行连接.

I'm trying to send SMTP e-mails using PHPMailer, but I keep getting this error message, any ideas how to get rid of it?
I'm trying to connect via SSL on port 465.

SMTP -> FROM SERVER: 
SMTP -> FROM SERVER: 
SMTP -> ERROR: EHLO not accepted from server: 

Notice: fputs() [function.fputs]: send of 18 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 494
SMTP -> FROM SERVER: 
SMTP -> ERROR: HELO not accepted from server: 

Notice: fputs() [function.fputs]: send of 12 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 212
SMTP -> ERROR: AUTH not accepted from server: 
SMTP Error: Could not authenticate.

我的代码:

  require_once('../library/PHPMailer_v5.1/class.phpmailer.php');

        try{
            $mail = new PHPMailer(true);
            $mail->IsSMTP();
            $mail->SMTPAuth = true;
            $mail->Host = SMTP_SERVER;
            $mail->Port = SMTP_PORT;
            $mail->Username = SMTP_USERNAME;
            $mail->Password = SMTP_PASSWORD;
            $mail->SMTPDebug = 2;
            $mail->SetFrom(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);
            $mail->Subject = 'AMAZONEK.cz - objednávka číslo '.$_SESSION['orderId'];
            $mail->MsgHTML('<b>Ahoj</b>');
            $mail->AddAddress($_SESSION['user']['email'], $_SESSION['user']['name'].' '.$_SESSION['user']['surname']);
            $mail->AddBCC(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);

            if(!$mail->Send()) throw new Exception($mail->ErrorInfo);
        }
        catch(Exception $e){
            echo $e->getMessage();
        }

常量定义:

define('SMTP_SERVER', 'smtp.ebola.cz');
define('SMTP_PORT', 465);
define('SMTP_USERNAME', 'myEmail@myDomain.tld');
define('SMTP_PASSWORD', '***CENSORED***');

define('MAIL_ORDERS_ADDRESS', 'myEmail@myDomain.tld');
define('MAIL_ORDERS_NAME', 'My Name');

有什么想法吗?

推荐答案

据我所知,您的代码一切正常.你的错误是:

As far as I can see everything is right with your code. Your error is:

SMTP 错误:无法验证.

SMTP Error: Could not authenticate.

这意味着您发送的凭据被 SMTP 服务器拒绝.确保主机、端口、用户名和密码正确.

Which means that the credentials you've sending are rejected by the SMTP server. Make sure the host, port, username and password are good.

如果您想使用 STARTTLS,请尝试添加:

If you want to use STARTTLS, try adding:

$mail->SMTPSecure = 'tls';

如果您想使用 SMTPS (SSL),请尝试添加:

If you want to use SMTPS (SSL), try adding:

$mail->SMTPSecure = 'ssl';

请记住:

  • 一些 SMTP 服务器可以禁止来自外部"的连接.
  • 某些 SMTP 服务器不支持 SSL(或 TLS)连接.

也许这个例子 可以提供帮助(GMail 安全 SMTP).

Maybe this example can help (GMail secure SMTP).

[来源]

相关文章