質問
2020年2月20日木曜日 8:16
お世話になっております。
エクセル VBAでメールを作成しようとしてますが、本文の.Bodyをセルを&でつなげて作成しています。
例えば、
Dim Honbun As String
Honbun = Range("A1").Value & vbLf _
Range("A2").Value & vbLf _
:
Range("A15").Value
Debug.Print Honbun
.Body = Honbun
.BodyFormat = olFormatPlain
.Display
のような形ですが、デバッグプリントでは、問題ないのですが、.Displayで表示させると、
長い行(URLですが、)最後の少し前で、改行されてしまいます。
メールのフォームに改行の字数を設定するところがあるのでしょうか。探したのですが、見つけることができませんでした。
よろしくお願いいたします。
すべての返信 (3)
2020年2月20日木曜日 14:05 ✅回答済み
なおメールが改行されてしまうのは、RFC5322 (あるいはその前身の RFC2822) の 2.1.1. Line Length Limits の項で、下記のように定められているためです。
There are two limits that this specification places on the number of
characters in a line. Each line of characters MUST be no more than
998 characters, and SHOULD be no more than 78 characters, excluding
the CRLF.
ざっくり言えば、メール本文の各行は、改行(CRLF)を除いて半角 78 文字までにすることが求められている、ということですね。(多少の超過は許容されるものの、最大で 998 文字まで)
そしてテキスト形式以外(HTML 形式、リッチテキスト形式)だと自動改行されないのは、送信データの改行が文章の改行とは別物であるためです。
2020年2月20日木曜日 12:27
これは、Outlook.MailItem オブジェクトを使用されているのでしょうか?
だとしたら、Outlook のオプション設定 [メール]-[メッセージ形式]-[指定の文字数で自動的に文字列を折り返す] の影響を受けているのだと思います。(30~132 の範囲で指定:初期値は 76)
自動折り返しを避けたいのであれば、BodyFormat を olFormatPlain に差し替えてから、Body を書き込むようにしてみては如何でしょう。
2020年2月21日金曜日 1:55
ありがとうございます。
リッチテキストフォームに変えたところうまくいきました。
感謝いたします。
書き忘れました。
>Outlook のオプション設定 [メール]-[メッセージ形式]-[指定の文字数で自動的に文字列を折り返す]
は変えて見ましたが、影響はありませんでした。