6

皆さん、

PHP ベースのサイト ( QCubed フレームワークを使用) を持っています。サイトの一部として、1 日に数千通のメールを送信するデーモンがあります (いいえ、私はスパマーではありません。すべてオプトインです :))。メールはカスタム フレームワーク コンポーネントを介して送信されます。そのコンポーネントは SMTP クライアントとして機能します。メールを実際に配信するために、DNSExit.com の有料 SMTP ゲートウェイを使用しています。

これらの電子メールは単純な HTML ベースの電子メールです。内部には単純なリンクしかありません。

私の問題は、移行中にこれらのリンクが時々 (一貫してではありません!) スクランブルされることです。タグが混同され、一部のリンクがメールで機能しなくなります。この問題は、送信されたすべての電子メールのごく一部で発生します。一貫性がありません (つまり、ソース メッセージの HTML がまったく同じであっても、移行時にスクランブルが発生する場合と発生しない場合があります)。

これを見た人はいますか?トラブルシューティング方法について何か考えはありますか?

4

6 に答える 6

3

一時ファイルを使用して電子メールを作成している可能性はありますか (または少なくとも可変コンテンツを作成していますか)? 私は昔、漠然と似たようなことをしました。電子メール テキストが生成され、正確な時間 (秒単位) に基づいて一時ファイルに書き込まれました。残念ながら、1 日に何千もの送信を行うと、同じ秒に複数回ヒットしていました (使用可能な秒数が 86k 秒しかないため)。これは、a) エラー率が小さいこと、および b) 明らかなランダム性を説明している可能性があります。トラブルシューティングとして、メールの数に応じてエラー率が増加するかどうかを確認し、そこから始めます.

于 2010-03-15T18:20:32.173 に答える
1

電子メールを送信するときは、メッセージ本文のすべての行が 76 文字を超えないようにエンコードする必要があります。これには base64 を使用できますが、生成されるメッセージが小さくなるため、ほとんどのシステムではテキストに quoted-printable エンコーディングが使用されます。通常、Base64 はバイナリ データにのみ使用されます。

于 2010-03-20T14:50:27.020 に答える
1

問題は、HTML が電子メールと互換性がないことです。それが私がMail Markup Languageを作成した理由です。

HTML は、HTTP プロトコルで動作するように作成されました。これら 2 つの技術は、同じ人物によってほぼ同時に発明されたためです。違いは、HTTP がサーバーからクライアントへの単一セッションの一方向転送であることです。HTML ドキュメントは常にサーバーで発生し、要求しているクライアントに送信され、転送が完了すると、クライアントとサーバー間の接続が切断されるため、これは決して変わりません。

電子メールはそのような方法で動作しません。電子メールでは、通信はクライアントで開始され、1 つ以上の電子メール サーバーに送信され、離れたクライアントで終了します。ただし、最大の違いは、HTTP を介したドキュメント転送の場合のように、単一の送信インスタンスのファイナリティでドキュメントが終了しないことです。SMTP で送信されたドキュメントは、要求されていない複数のユーザーに返信、転送、またはコピーできます。この 1 つの違いは、電子メール スレッドの考慮事項を考慮すると、非常に重要です。

問題は、前の 2 つの段落で示したように、SMTP と HTTP が異なることです。この違いは、SMTP と HTTP ではヘッダー データの作成方法が根本的に異なるという点でさらに複雑になります。HTML には、HTTP 送信のヘッダーとの互換性を意図したヘッダー データがあり、SMTP 送信には準拠していません。HTML ヘッダーも、電子メール スレッドの複雑さを考慮していません。

この問題は、電子メール ソフトウェアが HTML ドキュメントを破損して、そのソフトウェアの適合する要求に適合するために必要なフォーマット変更を追加し、ヘッダー データをドキュメントに直接書き込む場合に例示されます。この例証は、HTML メールがメール スレッドになると非常に顕著になります。HTML ヘッダー データには電子メール スレッドの複雑さを説明する方法がないため、ドキュメントの転送後も存続するスタイルシートから関連するプレゼンテーション定義を提供する方法はありません。HTML ドキュメント、または HTML 形式のドキュメントが 1 つの電子メール ソフトウェアから別の電子メール ソフトウェアに送信されるたびに、ドキュメントが破損し、各電子メール ソフトウェア デバイスが以前の破損を破損します。電子メール処理ソフトウェアは、ドキュメントを確実に破損する電子メール クライアント、または電子メール サーバーのいずれかを指す場合があります。

この問題の解決策は、電子メール ヘッダー データの要件を直接認識するマークアップ言語規則を作成することです。これらの要件は、SMTP プロトコルについては RFC 5321 で、クライアント処理については RFC 5322 で定義されています。電子メール スレッドの複雑さを考慮してこのソリューションを適切に拡張する唯一の方法は、マルチエージェント DOM の規則を提供することです。

技術的な不正確さ、およびマルチエージェント DOM という用語と、編集前であってもここで言及されていない発明された機能の性質との違いにより、段落が削除されました。

編集: マルチエージェント DOM はある程度の階層を適用しますが、これは電子メール スレッドを表すために必要ではない場合があります。

于 2010-03-20T23:49:50.290 に答える
1

sendmail を実行しているサーバーで同様の問題に遭遇しました。

私は、いつの日か大量メールで送信される HTML メールを作成してテストしていました (もちろん、オプトイン)。HTMLプログラマーなら誰でも簡単に読める電子メールのテンプレートを自分で用意しましたが、すべてを正しく並べるために空白が重くなりました。テンプレートがレンダリングされた後、これが大量に電子メールで送信される場合は、スペースを節約するためにファイル内の空白を最小限に抑えると思います! そこで、レンダリングされた電子メールから送信するのに不要な空白を削除するための見事な正規表現を作成しました。

メールを自分宛てに送信した後、メールを開いて、正規表現の前の以前のメールが正しく表示されていたのに、一部の css と html が正しく表示されていないことに気付き、困惑しました。元のメッセージを見ると、ときどき感嘆符 (!) がメッセージ全体にランダムに表示され、ランダムなパスにある css と html が壊れていることに気付きました。

メールの行が改行なしで長くなりすぎると、sendmail はそれを好まないことがわかりました。行が長くなりすぎると、sendmail は感嘆符とそれに続く改行をその場で挿入し、混乱させて困惑させます。

改行に単語間のスペースを選択しなかったのはなぜですか? なぜ感嘆符を挿入するのですか? 私が恐れている質問は、答えがありません。

私の解決策は?

sudo apt-get remove sendmail
sudo apt-get install exim4

メールを送信するのに 60 秒かかるなど、sendmail で他の問題が発生していましたが、exim4 は正常に動作し、それについてもう一度考える必要はありませんでした。

メール サーバーが sendmail を使用している場合、これが問題である可能性が非常に高くなります。私はベントする必要がありました。

于 2010-03-19T17:09:21.983 に答える
0

リンクに特別な属性がありますか? 内部に引用符がエスケープされていないタイトル属性でしょうか?

このようなもの:<a href="http://some.site" title="My "correct" link">Link</a>

于 2010-03-19T15:05:41.067 に答える
0

メール データに 2 つの問題がありました - 通常は「?」シンボルは何らかの単語の中に何らかの形で入り込み、もう 1 つは UTF とタイトルに関連していました。最初はホスティングプロバイダーを変更することで「修正」されました(メールサーバー関連でした)2番目はPHPmailerライブラリを変更することで修正されました。

データがどのように正確にスクランブルされるかを指定してみてください。

于 2010-03-10T09:26:42.353 に答える