繁体   English   中英

如何使用PHP从IMAP帐户发送电子邮件?

[英]How do you send email from IMAP account with PHP?

我在通过PHP / IMAP发送电子邮件时遇到问题 - 我不知道是不是因为:

  • 我没有正确理解IMAP,或者
  • 我的服务器有问题

我的应用程序打开与电子邮件帐户的IMAP连接以读取收件箱中的邮件。 它成功地做到了这一点 我遇到的问题是我想从此帐户发送邮件并将其显示在发件箱/已发送文件夹中。

据我所知,PHP imap_mail()函数不会以任何方式挂钩我当前打开的IMAP流。

我的代码执行时没有抛出错误。 但是,电子邮件永远不会到达收件人,也不会显示在我发送的文件夹中。

private function createHeaders() {
    return "MIME-Version: 1.0" . "\r\n" .
        "Content-type: text/html; charset=iso-8859-1" . "\r\n" .
        "From: " . $this->accountEmail . "\r\n";
}

private function notifyAdminForCompleteSet($urlToCompleteSet) {
    $message = "
        <p>
            In order to process the latest records, you must visit
            <a href='$urlToCompleteSet'>the website</a> and manually export the set.
        </p>
    ";

    try {
        imap_mail(
            $this->adminEmail,
            "Alert: Manual Export of Records Required",
            wordwrap($message, 70),
            $this->createHeaders()
        );
        echo("   ---> Admin notified via email!\n");
    }
    catch (Exception $e) {
        throw new Exception("Error in notifyAdminForCompleteSet()");
    }
}

我猜我需要手动将邮件复制到IMAP帐户中......或者这个问题有不同的解决方案吗?

此外,如果“from”地址中的域与运行此脚本的服务器上的域不同,这是否重要? 我无法解释为什么邮件永远不会被发送。

imap_mail只是sendmail二进制文件的包装器,就像mail函数一样。 您最好通过普通的SMTP方式发送邮件(查看PHPMailerSwift Mailer ),然后让您的代码将消息放入带有imap_append的Sent文件夹中。

不确定是什么导致发送失败,但你应该在代码中检查imap_send的布尔返回值。 除此之外,您还需要检查SMTP服务器日志以获取任何线索。

已经有一段时间了,但是对于其他人的记录,你可以通过imap_last_error()获得IMAP erorr。 这将为您提供上一个问题的错误字符串。

检查您对imap_mail的调用的返回值。 imap_mail在失败时不会抛出na异常,它返回false

此外,您必须自己将邮件复制到已发送文件夹, imap_mail不会为您执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM