【问题标题】:"Reply-To" on subject line of email (using php mail)电子邮件主题行上的“回复”(使用 php 邮件)
【发布时间】:2018-10-28 23:11:45
【问题描述】:

我使用 php mail 为邮件列表设置了一个简单的电子邮件,并且使用我找到的教程,我使用边界以纯文本和 html 格式发送它。

除主题行显示为

外,一切正常

下一次朴茨茅斯 Bootstrap 会议回复:mailings@portsmouthbootstrap.org

我不明白为什么还会显示“回复”。我已经尝试添加 \n 和 \r 以及许多其他内容,但似乎无法阻止这种情况的发生。

我知道那里有更好的邮件系统,但如果您能对此有所了解,我们将不胜感激。

        $mail_subject="Next Portsmouth Bootstrap meeting\r\n ";
        require("connectdb.php");

        $sql = mysqli_query($con, "SELECT email,name  FROM maillist WHERE subscribed='1'");
        if($sql === FALSE) { echo "err: ".mysqli_error($con); }

        $encoding = "utf-8";
        $subject_preferences = array(
        "input-charset" => $encoding,
        "output-charset" => $encoding,
        "line-length" => 76,
        "line-break-chars" => "\r\n"
);          

        while($row = mysqli_fetch_array($sql)) {
            $email = $row['email'];
            $name = $row['name'];
            echo "name=".$name." email=".$email."<br/>";
            $from_name="Portsmouth Bootstrap";
            $from_mail="mailings@portsmouthbootstrap.org";  
            $boundary = uniqid('np');   

            $headers = "MIME-Version: 1.0\r\n";
            $headers .= "From: ".$from_name." <".$from_mail."> \r\n";
            $headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n";
            $headers .= "Content-Transfer-Encoding: 8bit \r\n";
            $headers .= "Date: ".date("r (T)")." \r\n";
            $headers .= iconv_mime_encode("Subject", $mail_subject, $subject_preferences);
            $headers .= "Reply-To: mailings@portsmouthbootstrap.org\r\n";
            $headers .= "Return-Path: mailings@portsmouthbootstrap.org\r\n";
            $headers .= "X-Mailer: PHP/" . phpversion();

            $message = "This is a MIME encoded message.";
            $message .= "\r\n\r\n--" . $boundary . "\r\n";
            $message .= "Content-type: text/plain;charset=utf-8\r\n\r\n";
            //Plain text body
            $message .= $allmessageplain;
            $message .= "\r\n\r\n--" . $boundary . "\r\n";
            $message .= "Content-type: text/html;charset=utf-8\r\n\r\n";
            $unsub = "<p>To unsubscribe from this mailing list please click <a href='https://portsmouthbootstrap.org/unsub.php?email=".$email."'>here</a></p>";
            //Html body
            $message .= $allmessage.$unsub;
            $message .= "\r\n\r\n--" . $boundary . "--";

            mail($email, $mail_subject, $message, $headers);
        }

【问题讨论】:

  • 我猜iconv_mime_encode() 可能有问题,因为我只能看到这些。翻阅手册,似乎包含重要的注释。
  • 感谢您指出这一点。您对 iconv_mime_encode() 与主题相关是正确的,但是通读手册,我仍然看不到将回复添加到此行的任何原因:/
  • 不客气。我也没有,我自己也从来没有使用过这个功能,所以我不能说到底是什么导致了这个。尝试删除纯文本或 html mime;或尝试邮件手册中的新脚本。或更改编码类型。希望我能帮助你更多。

标签: php email subject


【解决方案1】:

您必须在函数调用之后附加换行符。

$headers .= iconv_mime_encode("Subject", $mail_subject, $subject_preferences) . "\r\n";

如果没有换行符,您将把它全部卡在一行上,但是这两行需要分开。

【讨论】:

  • 现在你提到它似乎很明显 - 每个其他标题都是分开的。当然工作得很好。非常感谢。
【解决方案2】:

您想要做的是将标头作为数组传递。它为您省去了处理所有这些换行符的麻烦,这确实是您最初的问题。

$headers = [
    "MIME-Version"              => "1.0",
    "From"                      => "$from_name <$from_mail>",
    "Content-Type"              => "multipart/alternative;boundary=$boundary",
    "Content-Transfer-Encoding" => "8bit",
    "Date"                      => date("r (T)"),
    "Subject"                   => str_replace("Subject: ", "", iconv_mime_encode("Subject", $mail_subject, $subject_preferences)),
    "Reply-To"                  => "mailings@portsmouthbootstrap.org",
    "Return-Path"               => "mailings@portsmouthbootstrap.org",
    "X-Mailer"                  => "PHP/" . phpversion()
];

来自the documentation

additional_headers(可选)

要在电子邮件标题末尾插入的字符串或数组。

...

如果传递一个数组,它的键是标题名称,它的值是相应的标题值。

【讨论】:

  • 好主意 - 我会在我的下一个项目之前给出这个!
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2018-09-12
  • 2011-08-28
  • 2017-07-16
  • 2013-06-29
  • 1970-01-01
相关资源
最近更新 更多