PHPMailer不发送到Outlook.com

时间:2017-04-20 03:02:08

标签: php security email outlook

背景

我一直使用PHPMailer通过我的网站发送电子邮件,但最近,某些人无法收到我的电子邮件。

我测试了这个问题,似乎无法将电子邮件发送到Outlook.com上的电子邮件。

另一方面,电子邮件可以发送到我测试过的所有其他电子邮件服务,包括Gmail和Zoho。

我尝试使用$mail->SMTPAuth = truelink)和$mail->SMTPOptionslink)变通方法,我发现这些变通方法来自其他地方。

$mail->send()似乎返回true,我从$mail->ErrorInfo收到任何错误。

无论如何,我发送的电子邮件都不会发送到Outlook.com电子邮件地址。

我是否需要添加某种安全功能才能发送到Outlook电子邮件地址?

如果我能提供任何其他信息,请告诉我。任何帮助将不胜感激!

PHPMailer代码:

require 'Classes/mail/PHPMailerAutoload.php';

$mail = new PHPMailer;

$recipient = $_POST['email_address'];
$recipient = preg_replace( '/\s+/', '', $recipient );
$recipient = trim( $recipient, ';' );

$recipient_array = explode( ';', $recipient );

$subject = $_POST['email_subject'];
$body = nl2br( $_POST['email_message'] );

$footer =   '<br />
            <table id="email_footer">
                <tr>
                    <td>
                        EMAIL SIGNATURE
                    </td>
                </tr>
                <tr>
                    <td>
                        <hr />
                        FOOTER IMAGE
                        <hr />
                    </td>
                </tr>
                <tr>
                    <td style="font-size:15px">
                        ADDRESS
                    </td>
                </tr>
            </table>';

$attachment = 'pdf/' . $_POST['attachment'];

$mail->isSMTP();                                // Set mailer to use SMTP
$mail->Host = 'localhost';                      // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                         // Enable SMTP authentication
$mail->Username = 'webmaster@example.com';      // SMTP username
$mail->Password = 'password123';                // SMTP password
$mail->SMTPSecure = 'tls';                      // Enable TLS encryption, `ssl` also accepted
$mail->Port = "25";                             // TCP port to connect to

$mail->SMTPOptions = array (
    'ssl' => array (
        'verify_peer'       => false,
        'verify_peer_name'  => false,
        'allow_self_signed' => true
    )
);

$mail->setFrom( 'webmaster@example.com', 'Business Name' );
$mail->addReplyTo( 'webmaster@example.com', 'Business Name' );

for ( $i = 0; $i < count( $recipient_array ); $i++ )
{
    $mail->addAddress( $recipient_array[$i] );
}

$mail->addAddress( 'example@zoho.com' );                            // Forwards to local email for records (cannot send email to own server [workaround])

$mail->Subject = $subject;                                          // Subject
$mail->Body = $body . '<br />' . $footer;                           // Body of email
$mail->AddAttachment( $attachment, 'purchase-order.pdf' );          // Attach a file

$mail->isHTML( true );                                              // Set email format to HTML

if( !$mail->send() )
{
    echo 'Message could not be sent.<br />';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
}

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我认为您的代码可以正常工作。 我曾经尝试向朋友发送邀请,并且在OUTLOOK中遇到了类似的问题。

这里有两件事要考虑。

  1. 每个电子邮件提供商的过滤条件都不同|封锁政策

    某些脚本可以将电子邮件发送给某些电子邮件提供商,但不能发送给其他电子邮件提供商。 通常,电子邮件提供商会首先阻止|过滤已发布的电子邮件帐户,如果他们对特定IP的垃圾邮件过多,则最终将阻止IP。

  2. 别看起来像垃圾邮件发送者

    更改“ webmaster@example.com”。也许它会工作几次,但是最终可以被阻止。 建议您创建测试电子邮件帐户以发送测试电子邮件,如果您的脚本运行良好,请使用REAL电子邮件帐户。 您可以使用支持SMTP的电子邮件进行测试。否则,最好在计算机中拥有适当的域

    不要一次发送给太多收件人,看起来像是垃圾邮件,对吗?一个又一个地更好,如果可以的话,请使用略有不同的电子邮件主题

    发送速度不要太快,请使用睡眠方法几秒钟并发送另一封电子邮件。否则,某些电子邮件提供商会认为您是DoS攻击者

  3. 查看邮件错误消息

    您的机器<=>(您的侧面安全层)<=>(电子邮件提供者的安全层)<=>电子邮件服务器
    他们进行通信并向您发送消息。
    就您而言,您不会从$ mail-> ErrorInfo,
    收到任何错误 案例1.如果您之前曾成功向Outlook发送电子邮件:
         我想您的请求可能不会到达电子邮件服务器。 (我想你被封锁了)。请联系OUTLOOK。
    案例2。如果您之前从未成功发送电子邮件到Outlook,则: 请检查电子邮件配置或您的防火墙和网络设置等。

希望这会为您提供简要指导。