web-dev-qa-db-ja.com

mailto特殊文字

電子メールクライアント(Outlook)にhtmlのmailtoリンクからの特殊文字を受け入れるようにする方法はありますか?本文にドイツ語の文字を含むmailtoリンクを作成しようとしていますが、Outlookでは奇妙な文字しか表示されません。

ありがとう

17
Bogdan S

この問題の調査に2日を費やしました。私たちの問題は、subject =文字列にノルウェー語の文字などの非ASCII文字が含まれている場合、utf-8でエンコードされたWebページのmailto:リンクがOutlookユーザーに対して機能しないことでした。例: "mailto:[email protected]?subject =julegløggogfårikål"

私がこれまでに学んだことから、Outlookは単にASCIIとiso-8859-1文字以外のものを処理しません。したがって、上記のmailtoリンク(IEまたはFirefoxから)をクリックしようとすると、Outlookは文字のデコードに失敗し、件名が壊れて「奇妙な」文字が含まれたままになります。

したがって、次のステップは、ISO-8859-1でページを再エンコードすることでした。私たちが行ったのは、utf-8ページの元のmailtoリンクを、次のような「email-to-iso」サービスへのリンクに置き換えることでした。

http://url.com/service.php?service=util.mailtoencode&mailto=mail%40coretrek.no%3Fsubject%3Demne+%C3%B8%C3%A6%C3%A5+emne

このページは、mailto文字をiso-8859-1に変換してから、ページのコンテンツ全体をiso-8859-1で出力します。 「location.href = 'mailto:...'」を含むページ上のJavaScriptを使用して、クライアントの電子メールクライアントを自動的に開きました。

これまでのところ、すべてが大丈夫のようでした。これは、ThunderbirdとOutlookの両方のInternet Explorerで実際に機能します(OutlookExpressとTB 2を使用したWinXPのIE7でテスト済み)。

しかし、現在の問題は実際にはFirefoxです。 Firefoxは、ISO-8859-1でのみ検出され、ASCIIでは検出されない文字を含むURLエンコードされたURLをデコードできないようです(ノルウェー語のåのように、エンコード時に%E5で表されます)。ページエンコーディングがutf-8の場合、同じåは正しく処理されますが、Firefox開発者はISO-8859-1文字セットと一緒に特殊文字をテストするのを忘れているようです。その結果、Firefoxはデコードされていない文字列(åの代わりに%E5を含む)を電子メールクライアントに渡します。そして、驚くべきことに、これはOutlook(文字列自体をデコードすることができます)では正しく処理されますが、Firefoxと同じバグがあると思われるThunderbirdでは処理されません。件名をURLエンコードしない場合、文字列はThunderbirdに正しく渡されますが、Outlookには渡されません。

Phpのhtmlentities、htmlspecialchars、base64エンコーディングなど、他のエンコーディング方法も試しましたが、いずれも失敗します。

だから、要約:

Utf-8でエンコードされたページ:

IEは常に失敗します

FF->サンダーバード:OK

FF-> Outlook:失敗

Iso-8859-1でエンコードされたページ:

IE:わかりました

FF-> Thunderbird:件名がURLエンコードされている場合は失敗し、そうでない場合はOK)

FF-> Outlook:サブジェクトがURLエンコードされていない場合は失敗し、エンコードされている場合はOK)(これはWindowsであり、Ubuntu Linux FFではTBは常にOKです)。

これが同じ問題を抱えている他の人に役立つことを願っています。

20

PHP Outlookで最適に機能する関数はrawurlencode()だと思います

10
Mario Chueca

Urlencodeメソッドを使用すると、探していることを実行できるはずです。 JavaScriptには文字列オブジェクトに対する.encodeURI()メソッドがあり、.NETには HttpUtility.UrlEncode メソッドがあります。

どの言語を使用していますか?

3
John Weldon

実際のところ、解決策は http://blogs.msdn.com/ie/archive/2007/02/12/International-Mailto-URIs-in-IE7.aspx であり、それは素晴らしいことではありません。

基本的に、IE 7および8では、ユーザーはインターネットオプションの詳細設定を有効にしている必要があります。100%のユーザーが知らないことは有効になっていないでしょう。

3
yandr

rawurlencode()関数はOutlookで最適に動作し、Firefoxでテスト済み、Chrome&IE

2
Kiran Gohel

mailto:プロトコルのUTF-8サポートを有効にする

Outlookのメインウィンドウで、[ツール]-> [オプション]-> [メール形式]-> [国際オプション]-> [mailto:プロトコルのUTF-8サポートを有効にする]をクリックします。

2
Dean Rather

Yandrが示したように、この問題はOutlookで進行中の問題です。

Microsoftには 公開されたドキュメント があります。適切に構成されたExchangeサーバーに接続された適切に構成されたOutlook 2003および2007は、デフォルトでUnicodeをサポートしますが、一般の人々にはあまり役立ちません。

参考までに、このために参照したい「標準」は RFC 2047 です。

この制限を回避するために私が実装した解決策(実際にはスウェーデン語で)は、mailto:リンクの代わりにWebフォームを使用することです。サーバー側でより多くのセットアップが必要ですが、連絡プロセスをより細かく制御できます。

これはあなたが聞きたかったことではないと確信していますが、世界がマイクロソフトの壊れたソフトウェアの使用をやめるまで、このような回避策が引き続き必要です。

1
ghoti

Mailtoリンクを含むページがOutlookが期待するエンコーディングである必要があるようです。状況についてこれ以上知らずに、UTF-8とISO-8859-1でページをエンコードしてみます。

関連する「状況の詳細」は、どのような奇妙な文字が表示され、ページのエンコーディングが現在何であるかです。

0
chaos

JavaScriptでは、件名と本文にencodeURIComponent関数を使用できます。次に、電子メール内のすべての特殊文字が表示されます。

const emailRequest = {
    to: "[email protected]",
    cc: "[email protected]",
    subject: "Email Request - for <CompanyName>",
    body: `Hi All, \r\n \r\n This is my company <CompanyName> 
            \r\n Thanks`,
};

const subject = encodeURIComponent(emailRequest.subject.replace("<CompanyName>", 'ABC & ** Company'));
const body = encodeURIComponent(emailRequest.body.replace("<CompanyName>", 'ABC & ** Company'));
window.location.href = (`mailto:${emailRequest.to}?cc=${emailRequest.cc}&subject=${subject}&body=${body}`);
0
Saliya Wicky

SharePoint 2010を使用している場合、Microsoftはこの問題を認識しており、これを解決するためのいくつかの機能を提供しているようです。

以下は、現在のページへのリンクを適切にエスケープします

escapeProperly(escapeProperlyCoreCore($(location).attr( 'href')、false、false、true))

0
PelleLauritsen