«Reply-To» в теме письма (используя php mail) - PullRequest
0 голосов
/ 29 октября 2018

Я настроил простое электронное письмо для списка рассылки, используя php mail, и, используя найденный мной учебник, я использовал границы для отправки его как в обычном, так и в html формате.

Все работает так, как должноза исключением того, что строка темы отображается как

Следующее собрание начальной загрузки Портсмута Reply-To: mailings@portsmouthbootstrap.org

Я не могу определить, почему «Reply-To»также показывает.Я пытался добавить \ 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);
        }

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

То, что вы хотите сделать, это передавать заголовки в виде массива.Это избавляет вас от необходимости иметь дело со всеми этими новыми строками, что действительно было вашей первоначальной проблемой.

$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()
];

Из документации :

Additional_headers (необязательно)

Строка или массив для вставки в конец заголовка электронного письма.

...

Если передан массив, его ключиявляются именами заголовков, а его значения являются соответствующими значениями заголовков.

0 голосов
/ 29 октября 2018

Вы должны добавлять символы новой строки после вызова функции.

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

Без перевода строки вы глушите все это на одной строке, но две строки должны быть разделены.

...