0

Zend_Mail を使用して、SMTP 経由でテキスト メールを送信しています。テスト環境で、ブラウザ クライアントを介してメールを収集すると、URL がハイパーリンクに変換されますが、リンクと通常のテキストの境界が間違った場所に描画されることに気付きました。

たとえば、以下のメール スニペットでは、登録メールをユーザーに送信したことがわかります。「id」と「code」のパラメーターが含まれます。この場合、ブラウザ クライアントは、'id' がハイパーリンクの一部であると判断しましたが、'code' はそうではありません。

please follow this link <a href="http://mydomain.com/user/validate/id/18">http://mydomain.com/user/validate/id/18</a>/code/1a0d917c1512c700f7237ae1f3727e47 If you did not...

場合によっては、「境界」が任意の場所に描画されることがあります。たとえば、コード フィールドの途中です。

Outlook などのクライアント経由でメールを収集する場合、問題は発生しないようです。

おそらくこれは、私の PHP 環境と私のブラウザー クライアントの間の文字セットの非互換性によるものです。そうは言っても、私はストック標準の PHP インストールを使用しており、ブラウザー クライアントで他のサイトからのリンクを受け取る際に問題はありませんでした。(ブラウザ クライアントは Webmasters アカウントの一部として提供されます。)

何か案は?

更新: リンクを生成するコードは次のとおりです。EOT、一重引用符、二重引用符を含むあらゆる種類の組み合わせを試しました...同じ結果...

$id         = $options['id'];
$code       = $options['validation'];
$link       = "http://mydomain.com/user/validate/id/" . $id . "/code/" . $code;

$body = 'Thanks for registering ... please follow this 
link ' . $link . ' If you did not request ....please ignore it.';

$this->setBodyText($body);
4

1 に答える 1

0

setBodyText()を使用して、電子メールの一部のみのテキストを設定します。プレーン テキストの電子メールにリンクを書き込む場合、特定の意味を持たないいくつかの文字のみを書き込みます。メールを受信したクライアントは、それがリンクであるかどうかと、それをレンダリングする方法を理解します。ただし、このプロセスは私たちの管理外です (これはクライアント側であり、ユーザーのクライアントに依存します)。

私の意見では、最善の解決策は、Zend_Mail オブジェクトの HTML 部分も設定して

$yourMailObject->setBodyHtml($htmlString);

これを行うと、メール クライアントにリンクのレンダリング方法を明示的に伝えます

もう少し作業が必要なのは明らかですが、クライアントに HTML プロパティを A タグとしてレンダリングさせたいので、適切な HTML をクライアントに渡す方がよいでしょう。

要約すると、ワークフローは次のようになります。

  1. リンクを決定し、それを(たとえば)$link変数に入れます
  2. メール本文をプレーンテキストで準備します。$bodyText = "Something... click here: $link ...";
  3. メール本文を HTML で準備します。$bodyHtml = "<body><p>Click the link below</p><p><a href='$link'>$link</a></p><p>Or copy and paste in your browser the url:<br/><pre>$link</pre></p></body>";
  4. メール オブジェクトの両方のメソッドを呼び出します。$yourMailObject->setBodyText($bodyText)->setBodyHtml($bodyHtml);

その後、通常どおりメールを送信できます。オプションで、インラインcssなどを追加して、より複雑な方法で html をカスタマイズできます。テキストのみのメール (モノスペース フォントを使用) として表示されるようにフォーマットすることもできますが、正しい HTML を渡したので、クライアントが適切なリンクをクリックすることを確認できます。

于 2011-10-27T23:07:28.520 に答える