質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

806閲覧

mailtoの半角スペースの文字化け

plum8

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2023/02/03 12:39

編集2023/02/04 16:43

実現したいこと

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で立ち上がるメールでは改行されています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/02/03 13:42

起動したメールソフトが + や %20 を空白に変換するはずですが、どんなメールソフトをお使いですか?
plum8

2023/02/03 13:46

outlook (office365)です。
otn

2023/02/03 14:05 編集

OfficeのOutlookはインターネットメールと相性悪いので、無理かも知れないと思って、mailto: をOutlookに関連付けてやってみましたが、Office2019のOutlookでは空白に変換されましたよ。 Office365のOutlookだと + や %20 のままと言うことでしょうか? まあ、Outlookのインターネットメール機能にあまり期待しない方が良いですが。
退会済みユーザー

退会済みユーザー

2023/02/03 14:31 編集

ASP.NET のタグが付いてますが、ブラウザと JavaScript とメーラーが関係しているだけで ASP.NET は関係ないのでは? そうであれば ASP.NET のタグは外してください。
退会済みユーザー

退会済みユーザー

2023/02/03 22:51 編集

Model.bodytext は This email is automatically sent by the system. となっているが、質問のコードにあるようにページ内で文字列を組み立てて location.href に代入すると、結果ブラウザに送られる html ソースが、 &body=This+email+is+automatically+sent+by+the+system. となると言ってますか?
plum8

2023/02/04 01:09

let body = ”@Model.bodytext"; ↑ bodyは「This email is automatically sent by the system.」です。 立ち上がったメールが「This+email+is+automatically+sent+by+the+system.」になっています。
otn

2023/02/04 06:35

> 立ち上がったメールが「This+email+is+automatically+sent+by+the+system.」になっています。 Office365のOutlookがそういう仕様なら、それを使い続ける前提なら、諦めるしか無いでしょうね。 ただOffice2019のOutlookでは問題ないので、365側のバグと認識されて修整される可能性もあると思いますが。 念のため、Thunderbirdなど普通のメールソフトで試してみて、プログラム側の問題で無いことを確認しましょう。
plum8

2023/02/04 07:43

SurferOnWwwさんがThunderbirdで検証して下さいました。 問題なく表示されています。 月曜日に英文のみで本文を作成してテストをしてみます。
guest

回答1

0

ベストアンサー

検証してみましたが、ASP.NET は関係なくてメーラーの問題のようです。自分のメーラー Thunderbird 102.7.1 (32 ビット) では、

location.href = 'mailto:' + address + '?subject=' + subject + '&body=' + body;

で立ち上がるメーラーの本文は半角スペースのままです。送信すればそのままの形で受信できます。

メーラーを変えて試してみてはいかが?

参考にどうやって検証したかを以下に書いておきます

Visual Studio 2022 のテンプレートで作成した .NET 6.0 の Razor Pages アプリの Privacy ページに質問者さんの提示したコードと同等のものを追加。

Privacy.cshtml.cs

C#

1using MessagePack.Formatters; 2using Microsoft.AspNetCore.Mvc; 3using Microsoft.AspNetCore.Mvc.RazorPages; 4 5namespace RazorPages2.Pages 6{ 7 public class PrivacyModel : PageModel 8 { 9 private readonly ILogger<PrivacyModel> _logger; 10 11 public PrivacyModel(ILogger<PrivacyModel> logger) 12 { 13 _logger = logger; 14 } 15 16 public string bodytext { get; set; } = null!; 17 public string address { get; set; } = null!; 18 public string subject { get; set; } = null!; 19 20 public void OnGet() 21 { 22 bodytext = "This email is automatically sent by the system."; 23 address = "xxxxx"; // xxxxx は自分のメールアドレス 24 subject = "test"; 25 } 26 } 27}

Privacy.cshtml

cshtml

1@page 2@model PrivacyModel 3@{ 4 ViewData["Title"] = "Privacy Policy"; 5} 6<h1>@ViewData["Title"]</h1> 7 8<p>Use this page to detail your site's privacy policy.</p> 9 10@section Scripts { 11 <script type="text/javascript"> 12 let body = "@Model.bodytext"; 13 let address = "@Model.address"; 14 let subject = "@Model.subject"; 15 16 location.href = 'mailto:' + address + '?subject=' + subject + '&body=' + body; 17 </script> 18}

Privacy ページを要求すると location.href でメーラー (Thunderbird) が立ち上がります。半角スペースは半角スペースのままで + になるなんてことはありません。

イメージ説明

送信すれば上の画像の通りの本文(半角スペースは半角スペースのまま)が受信されます。

投稿2023/02/04 01:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問