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

时间:2010-12-22 19:29:49

标签: php imap

我遇到通过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”地址中的域与运行此脚本的服务器上的域不同,这是否重要?我无法解释为什么邮件永远不会被发送。

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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