phpMailer plesk centos 多IP设置

标签 php email centos phpmailer plesk

我有一个 Plesk centos 6 云服务器,它在两个不同的 IP 上运行两个域。其中一个域具有子域,这些子域通过指定的 smtp 服务器(在本例中为 gmail)通过 phpMailer 发送电子邮件。

虽然我不认为问题出在执行 phpMailer 的级别或可以在执行 phpMailer 的级别上得到缓解,但这里有一个示例来演示:

$mail = new PHPMailer;
$mail->SMTPDebug = false;
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->CharSet = 'UTF-8';
$mail->Username = $GLOBALS['gmail'];
$mail->Password = $GLOBALS['email_password'];
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->From = $GLOBALS['gmail'];
$mail->FromName = $GLOBALS['sender'];
$mail->addReplyTo($GLOBALS['gmail'], "Reply");
$mail->isHTML(true);
$mail->addAddress($this->data['Email']); 
$mail->Subject = "...";
$mail->Body = "...";
$mail->Send();

现在我在 postmaster.live.com 的智能网络数据服务中看到,由于垃圾邮件的证据,两个 IP 都已被阻止。

调查后我发现了我怀疑的问题 - 在电子邮件 header 的 Received 部分,发送子域的名称正确识别,但发送 IP 地址是另一个域的 IP 地址.像这样:

收到:来自 正确的 subdomain.domain.com(不正确的反向 DNS 域 [不正确的 IP])由 smtp.gmail.com .. .

phpMailer 似乎从错误的 IP 地址连接到 smtp.gmail.com,结果是反向 DNS 查找解析为另一个域的查找——这很可能是 Microsoft 发现的。

在 Plesk 中(工具与设置 -> IP 地址),应该是正确域的 IP 列在最前面,并且是粗体,表明这应该是默认值。

更新: 现在我尝试了:

        $options = array(
            'socket' => array(
                'bindto' => '**the required IP**',
            ),
        );
        $socket_context = stream_context_create($options);
        $this->smtp_conn = stream_socket_client(
                        $host . ":" . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context
        );

这产生了以下错误,将问题具体缩小为无法绑定(bind)与域关联的 IP:

PHP 警告:stream_socket_client():无法绑定(bind)到“domainIP:587”,系统说:权限被拒绝

非常感谢任何帮助。

最佳答案

幸运的是,找到了一个解决方案 - 当将 bindto 参数放置在传递给 PHPMailer 的连接方法定义中的 stream_context_create 的选项对象中时,由于未知原因 PHP 不允许 - 在调用方法时直接设置它确实有效,如下所示:

    $mail->SMTPOptions = array(
            'socket' => array(
            'bindto' => "specificIP:0",
            ),
    );

关于phpMailer plesk centos 多IP设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47303154/

相关文章:

电子邮件问题中的 Phpmailer 图片

php - Laravel 4 路由 - 如果不满足条件则能够跳过路由

php - 包括标题页 session 错误

php - SQL查询只打印第一行

python - 在 App Engine/Python 中发送 HTML 电子邮件?

mysql - 无法在 CentOS 上使用 MariaDB 编译 C 程序

javascript - 第一次加载 html 页面时播放声音

c# - 使用 ASP.NET 发送邮件

java - 斯卡拉/Java/Linux : is it possible to monitor a system process passively?

node.js - 使用 React 从 nodejs 服务器获取图像