実現したいこと
mailtoでタイトルと本文の半角スペースの文字化け(+)をなくしたい
前提
ASP.NET Core .net6 Razor pages、 javascript、Windows10, outlook 365
タイトルと本文をDBから取得しmailtoにセットしています。
半角スペースが"+"になってしまいます。
発生している問題・エラーメッセージ
例: このメールはシステムより自動配信されています。 This+email+is+automatically+sent+by+the+system. ↑ 英文の半角スペースが+になってしまう
javascript
let body = ”@Model.bodytext"; let address = "@Model.address"; let subject = "@Model.subject"; location.href = 'mailto:' + address + '?subject=' + subject + '&body=' + body;
試したこと
encodeURI を行うと半角スペースが%20で表示されます。
DBに半角スペースを%20で登録してもダメでした。
改行はDBに\nで登録し、mailtoで立ち上がるメールでは改行されています。
起動したメールソフトが + や %20 を空白に変換するはずですが、どんなメールソフトをお使いですか?
outlook (office365)です。
OfficeのOutlookはインターネットメールと相性悪いので、無理かも知れないと思って、mailto: をOutlookに関連付けてやってみましたが、Office2019のOutlookでは空白に変換されましたよ。
Office365のOutlookだと + や %20 のままと言うことでしょうか?
まあ、Outlookのインターネットメール機能にあまり期待しない方が良いですが。
ASP.NET のタグが付いてますが、ブラウザと JavaScript とメーラーが関係しているだけで ASP.NET は関係ないのでは? そうであれば ASP.NET のタグは外してください。
Model.bodytext は
This email is automatically sent by the system.
となっているが、質問のコードにあるようにページ内で文字列を組み立てて location.href に代入すると、結果ブラウザに送られる html ソースが、
&body=This+email+is+automatically+sent+by+the+system.
となると言ってますか?
let body = ”@Model.bodytext";
↑ bodyは「This email is automatically sent by the system.」です。
立ち上がったメールが「This+email+is+automatically+sent+by+the+system.」になっています。
> 立ち上がったメールが「This+email+is+automatically+sent+by+the+system.」になっています。
Office365のOutlookがそういう仕様なら、それを使い続ける前提なら、諦めるしか無いでしょうね。
ただOffice2019のOutlookでは問題ないので、365側のバグと認識されて修整される可能性もあると思いますが。
念のため、Thunderbirdなど普通のメールソフトで試してみて、プログラム側の問題で無いことを確認しましょう。
SurferOnWwwさんがThunderbirdで検証して下さいました。
問題なく表示されています。
月曜日に英文のみで本文を作成してテストをしてみます。
回答1件