带有 yandex 邮件的 phpmailer 类

Posted

技术标签:

【中文标题】带有 yandex 邮件的 phpmailer 类【英文标题】:phpmailer class with yandex mail 【发布时间】:2014-09-18 14:19:29 【问题描述】:

我正在为我的网站表单使用 phpmailer 类。但是 YANDEX MAIL 用 phpmailer 发送邮件不起作用。 但是两天前它起作用了。我尝试了所有组合。

例如:“ssl”、“tls”、“端口更改”,但它不起作用。示例我的代码:

         $mail->IsSMTP();

         $mail->SMTPSecure = "ssl"; // or "tls" (I was try)

         $mail->Host = "smtp.yandex.com.tr"; or "ssl://smtp.yandex.com.tr"(I was try)

         $mail->Port =587; or "465,25,587"(I was try)

         $mail->SMTPAuth = true;  or "false"   

         $mail->Username = "email@mywebsite.com";

         $mail->Password = "mypassword";

         $mail->From = "email@mywebsite.com";

         $mail->FromName =$email;

         $mail->AddAddress("goto@mywebsite.com");

谢谢大家的回答

【问题讨论】:

你没有说它是怎么不工作的——你看到了什么错误信息或症状?有效的协议/端口组合为ssl/465(已弃用)、tls/587,偶尔还有tls/25。 Telnet 到他们服务器上的 587 端口当然可以,所以我会选择tls/587Port 应该是一个整数值。您发布的代码实际上不会发送任何内容,因此我假设您还有更多尚未发布的代码。 【参考方案1】:

我也在为此苦苦挣扎。以下是经过验证的工作设置。但在尝试这些设置之前,您还需要登录 Yandex 并通过 https://mail.yandex.com 接受 eula 或其他内容。

$mail->Host = 'smtp.yandex.com';
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->SMTPOptions = array (
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true)
);

【讨论】:

【参考方案2】:

就我而言,我公司的防火墙阻止了 smtp。我连接了我的个人热点然后它工作了。

【讨论】:

【参考方案3】:

我也遇到过同样的问题。我找到了可行的解决方案:

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = 'smtp.yandex.ru';
$mail->Port = 25;
$mail->Username = 'user@yandex.ru';
$mail->Password = 'PasswordGoesHere';
$mail->setFrom('user@yandex.ru', 'Username');
$mail->addAddress($mailToAddr);
$mail->CharSet = "Windows-1251";
$mail->ishtml(true);
$mail->Subject = $subject;
$mail->Body = nl2br($message);
$mail->AltBody = $message;
if (!$mail->send()) 
    echo $mail->ErrorInfo;
 else 
    // email sent

【讨论】:

【参考方案4】:

至于现在(2021 年 6 月)要使用 PHPMailer 和 Yandex,您应该执行以下操作:

首先,准备您的 Yandex 帐户。他们有很清楚的instruction,但用的是俄语。简而言之:

    在“邮件 → 所有设置 → 电子邮件客户端”页面选中“使用邮件客户端检索您的 Yandex 邮件 - 通过 IMAP 从 imap.yandex.com 服务器”和“IMAP 授权方法 - 应用程序密码和 OAuth 令牌”。

    在“帐户管理”页面的“密码和授权”部分选择“启用应用密码”并创建新的应用密码。

然后您可以使用启用了SSL 加密的 SMTP 端点 smtp.yandex.ru:465,应用程序密码如下:

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = 'smtp.yandex.ru';
    $mail->Port = 465;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // public const ENCRYPTION_SMTPS = 'ssl';
    $mail->Username = 'EMAIL@yandex.ru';
    $mail->Password = 'PASSWORD';
    $mail->setFrom('FROM_EMAIL@yandex.ru', 'FROM');
    $mail->addAddress('TO_EMAIL@yandex.ru');
    $mail->Subject = 'SUBJECT';
    $mail->Body = 'BODY';
    $mail->send();

您可以通过在“邮件→所有设置→电子邮件客户端”页面中勾选“IMAP授权方法-门户密码”来避免创建应用程序密码并使用您的帐户密码,但服务不建议这样做。

【讨论】:

以上是关于带有 yandex 邮件的 phpmailer 类的主要内容,如果未能解决你的问题,请参考以下文章

使用phpmailer通过带有图像的html文件发送电子邮件

当我们使用 phpMailer 发送带有动态内容的邮件时,如何在电子邮件正文中显示多个内联图像

PHPMailer 发送电子邮件并返回带有回显的空白页面

PHPMailer拒绝发送没有附件的电子邮件

使用php发送电子邮件(phpmailer)

关于 PHPMailer 邮件发送类的使用心得(含多文件上传)