PHPMailer позволяет отображать границу MIME - PullRequest
0 голосов
/ 23 февраля 2019

Я использую PHPMailer для отправки электронной почты через smtp-relay.gmail.com - см. Предыдущее сообщение После создания учетной записи через G-Suite мои учетные данные принимаются, но при доставке электронной почты,Я вижу текстовую версию, а также HTML-версию, с некоторыми другими символами на этом пути:

    ------example.com----250cd4bbb8be52d828379181e485c269 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Order Received

...

 ------example.com----250cd4bbb8be52d828379181e485c269 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Далее следует HTML-версия, это заканчивается следующим:

------example.com----250cd4bbb8be52d828379181e485c269-- 

Когда я использовал версию vanilla, она работала просто отлично, не видя простой текст или данные границы MIME:

$send = mail($recpEmails, $subject, $htmlMessage, $headers);

Переменная$ htmlMessage по-прежнему содержит ту же информацию, что и раньше, но теперь PHPMailer отправляет ее через следующую строку:

$mail->Body = $htmlMessage;

Я бы не увидел обычный текст или эти другие строки с черточками.Почему отправка через PHPMailer> smtp-relay.gmail.com изменит результаты?

Это потому, что я добавил следующую строку?

$mail->IsHTML(true);

Это из-за следующей строки и,если да, то что мне установить?

$mail->SMTPDebug = 3;

Есть ли в G-Suite конфигурации> электронная почта> дополнительные настройки, которые мне нужно изменить?

Вот обновленный кодиз предыдущего поста:

  $mail = new PHPMailer(true);

  $mail->isSMTP();
  $mail->SMTPDebug = 3; 
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "tls";
  $mail->Host = "smtp-relay.gmail.com";
  $mail->Port = "587";
  $mail->Username = "info@example.com";
  $mail->Password = "somePassword";
  $mail->setFrom("info@example.com");
  $mail->isHTML(true);
  $mail->Subject = $subject;
  $mail->Body = $htmlMessage;
  $mail->addAddress($recpEmails);
  $mail->Send();

Заранее спасибо

1 Ответ

0 голосов
/ 23 февраля 2019

Оказывается, что ответ в следующем stackoverflow post

Я использовал для построения границы MIME между текстом и HTML-версией через почту PHP следующим образом:

Создайте текстовое сообщение - оно должно быть точно таким же, как ваш html, чтобы не быть помеченным как спам:

$plain_text = ""; // same words that will appear in the html

Начать создание границы mime:

# -=-=-=- MIME BOUNDARY
$mime_boundary = "----example.com----".md5(time());
# -=-=-=- MAIL HEADERS

Создатьтема:

$subject = "example.com\n";

Создайте заголовки, которые будут включать границу пантомимы, которую вы начали ранее.Кроме того, добавление простого текстового сообщения в заголовок - между первой границей MIME :

$headers = "From: example.com <cs@example.com>\n";
$headers .= "Reply-To: example.com <cs@example.com>\n";
$headers .= "BCC: example.com <info@example.com>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";

$htmlMessage = "--$mime_boundary\n";
$htmlMessage .= "Content-Type: text/plain; charset=us-ascii\n";
$htmlMessage .= "Content-Transfer-Encoding: 7bit\n";
$htmlMessage .= "$plain_text\n";

$htmlMessage .= "--$mime_boundary\n";
$htmlMessage .= "Content-Type: text/html; charset=UTF-8\n";
$htmlMessage .= "Content-Transfer-Encoding: 8bit\n\n";
$htmlMessage .= "<html>\n";
$htmlMessage .= "<body>\n";
$htmlMessage .= "" // has to be the same words as the plain text to avoid being marked as spam
$htmlMessage .= "</body>\n";
$htmlMessage .= "</html>\n";

Заполнение границы MIME:

# -=-=-=- FINAL BOUNDARY
$htmlMessage .= "--$mime_boundary--\n\n";
# -=-=-=- SEND MAIL

Однакос PHPMailer весь этот код больше не нужен, используя следующие две строки кода:

  $mail->AltBody = $plain_text; 
  $mail->Body = $htmlMessage;

Вот что я протестировал и использовал:

  $mail = new PHPMailer(true);

  $mail->isSMTP();
  $mail->SMTPDebug = 3; 
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "tls";
  $mail->Host = "smtp-relay.gmail.com";
  $mail->Port = "587";
  $mail->Username = "cs@example.com";
  $mail->Password = "somePassword";
  $mail->setFrom("cs@example.com");
  $mail->isHTML(true);
  $mail->Subject = $subject;
  $mail->AltBody = $plain_text; 
  $mail->Body = $htmlMessage;
  $mail->addAddress($recpEmails);
  $mail->Send();

Почти забыл, но вот как я добавил BCC:

  $mail->addBCC("info@example.com"); 
...