web-dev-qa-db-ja.com

HTMLメールが改行で壊れる

Mail systemおよびSwift mailer *モジュールを使用してHTMLメールを送信しています。次に、カスタムモジュールを実装してHTMLニュースレターをユーザーに送信しました。メールが期待どおりに表示されなかった:多くのスタイルがランダムに壊れ続けました。

掘り下げた後、メールの文字列がランダムに新しい行で区切られるという問題が見つかりました。文字列の重要な位置に新しい行が来ると、メール全体が破損します。これらの奇妙な新しいラインがどこから来ているのかを知る必要がありました。

私はこれを期待して何もしていませんでした。

_$body = 'some html code without new lines';
$body .= 'some more html code without new lines';
$body .= 'some more and some more html code without new lines';

$params['body'] = Markup::create($body);
$language = $recipient['lang'];
$to = $recipient['mail'];
$params['to'] = $to;
$result = $mailManager->mail('custom_newsletter_mail', 'newsletter', $to, $language, $params, $from, $send_bool);
_

Markup::create($body)の機能がわからないので、削除してみました。電子メールは改行なしで配信されましたが、HTMLはレンダリングされませんでした。

メールシステム構成では、swiftmailerをFORMATTERに設定し、デフォルトPHP mailerをSENDERに設定します。

これは、カスタムモジュールの.moduleファイルです。

_function custom_newsletter_mail_mail($key, &$message, $params) {
  $message['body'] = [];
  $message['subject'] = [];
  $message['format'] = 'text/html';
  $message['subject'] = $params['title'];
  $message['body'][] = $params['body'];
  $message['headers'] = array(
    'content-type' => 'text/html',
    'charset' => 'UTF-8',
    'format' => 'flowed',
    'delsp' => 'yes',
    'from' => $params['from']
  );
}
_

私のテスト環境では、改行なしでメールが送信される(メールは期待どおりに見える)が、実稼働環境では送信されないことがわかりました。すべての設定を再確認しました。私が知る限り、どちらも同じです。

Swiftメーラーの代わりにMIMEメールを使用してみましたが、動作しました!!改行やスペースはありません(HTMLメールは実際に見栄えがします)が、MIMEメールはライブメールにしか届きません。何らかの理由でyahooまたはgmailで作業します。

これを修正する必要があります。 Swiftメーラーの問題だと思うので、メール本文の迷惑な新しい行を削除する必要があります。

2
Bassem Mohamed

改行なしではメールを送信できません

SMTP標準必須行は1000文字に制限されています。 998は、行が"\r\n"で終わる必要があるためです。

改行が挿入されないようにすると、インターネット上の多くのメールサーバーがメールを拒否します。彼らが基準を無視することに決めたので、何人かはそれを受け入れるでしょう。だれがそれをするか推測しなさい。

多くのサーバーはそうしません。

この問題に対する正しい答えは、改行を含むHTMLメールを作成することです。これは本当に簡単です。テーブルを使用する場合は</tr>のようにかなり頻繁に出現するいくつかの要素を選択し、CSSルールの終了波括弧を使用し、その後に改行を挿入します。

HTMLを確認することで、必要に応じて、非常に愚かなHTMLテキストを回避することもできます。 TweakTownからのニュースレターメールでソースを表示していたところ、最初に一連のCSSルールが最初に含まれていました。次に、すべてのテーブル行がインラインスタイルと同じCSSを繰り返します。本当に。どうして?その行が1,000文字を超えるのも不思議ではありません。

それで、人々はスペースを節約するために改行なしで意図的にHTMLを作成していますか?そうだとすれば、CSSルールのスパムはスペース節約の反対です。

2
Zan Lynx