【告知】Internet Commandによるメール送信について

Go down

【告知】Internet Commandによるメール送信について

投稿 by miyako on 2017-02-01, 5:15 pm

Internet Commandsが正式にUnicodeモード対応となったのはv14以降です。
v13以前は,非Unicodeのプラグインでした。

参考

非Unicodeのプラグインは,Unicodeモードのアプリケーションでも使用することができます。テキスト型のデータは,4Dが使用するUTF-16とプラグインが使用する内部文字コード(Shift_JIS, 32,000文字まで)の間で自動的に変換されるようになっています。

ところが!

v14以降のInternet Commandsは,多数のバグがありました。

メール送信の文字化け問題は特にひどく,初期のv14はShift_JISやISO-2022-JP(ガラケー端末のサポートに必要)の処理が正しくありませんでした。

v14でUTF-8以外の送信ができるようになったのは,v14.5のことです。v15はv14と同等ですが,15.2にはバグがありました(15.1のほうが良い)。

◆ v14/15 UTF-8

$error:=SMTP_SetPrefs (1;15;0)
$error:=SMTP_Charset (1;1)

◆ v14/15 ISO-2022-JP

$error:=SMTP_SetPrefs (1;14;0)
$error:=SMTP_Charset (1;1)

ISO-2022-JP (10) ではなく,Shift_JIS (14) を指定することにより,ISO-2022-JPでメールを送信することができます。

Internet CommandsはShift_JISでメールを送信しますが,メールサーバー(Exchange, Gmailなど)が本文をISO-2022-JPに変換してくれます。

ISO-2022-JP (10) を指定した場合,4DがISO-2022-JPでメッセージを構築することになります。

しかし,本文の内容によっては,一部のメールクライアントで文字化けが発生するかもしれません。(特に最後の行の最後の文字が非ASCIIの場合)

対策

SMTP_SetPrefs (1;10;0) を SMTP_SetPrefs (1;14;0) に書き換えてください。

参考

http://forums.4d.fr/Post/EN/17448604/0/0/

ISO-2022-JPについて

SMTP_SetPrefs のオプション10は,ISO-2022-JPを指します。

http://doc.4d.com/4Dv15/4D-Internet-Commands/15/SMTP-SetPrefs.301-2397898.ja.html

しかし,4D Internet CommandsのISO-2022-JPは,仕様(日本のデファクトスタンダード)どおりではありません。

たとえば,半角カナに対応していない,Windowsの機種依存文字が扱えない,円記号とオーバーラインの扱いがJIS X 201に準拠していない,などの間違いがあります。

それで,前述したように,4DにISO-2022-JP処理を任せるよりも,Shift_JISを指定したほうが安全です。

参考

http://www.4d.com/jp/blog/mime-and-iso-2022-jp.html

v16のInternet Commandsは,MacおよびWindowsで64ビット版をリリースするため,大幅な書き換えが必要でした。

さらに,コマンドの仕様が少し変更されています。

SMTP_Charset encodeHeaders ($1)

v15: 値「0」は管理しない,の意
v16: 値「0」はデフォルト,つまり件名はUTF-8,他のヘッダーはShift_JISの意

SMTP_Charset bodyCharset  ($2)

v15: 値「0」は管理しない,の意
v16: 値「0」はデフォルト,つまりUTF-8とBase64の意

http://doc.4d.com/4Dv15/4D-Internet-Commands/15/SMTP-Charset.301-2397916.ja.html
http://doc.4d.com/4Dv16R2/4D-Internet-Commands/16-R2.1620/SMTP-Charset.301-3188300.ja.html

SMTP_SetPrefs bodyType ($2)

これまでどおり,本文,ヘッダー(SMTP_Charsetで値「1」を指定した場合),添付ファイル名のエンコーディングに影響します。

また,ドキュメントの一覧表も改定されており,「本文」と「ヘッダーおよびファイル名」それぞれのエンコーディングが列挙されています。

http://doc.4d.com/4Dv15/4D-Internet-Commands/15/SMTP-SetPrefs.301-2397898.ja.html
http://doc.4d.com/4Dv16R2/4D-Internet-Commands/16-R2.1620/SMTP-Charset.301-3188300.ja.html

◆ v16 UTF-8

$error:=SMTP_SetPrefs (1;15;0)
$error:=SMTP_Charset (1;1)

または

$error:=SMTP_SetPrefs (1;1;0)
$error:=SMTP_Charset (1;1)

◆ v16 ISO-2022-JP

$error:=SMTP_SetPrefs (1;14;0)
$error:=SMTP_Charset (1;1)

ポイント

「管理しない」の意味で値「0」をSMTP_Charsetに渡している場合,誤動作の原因になるかもしれません。

まとめ

4D Internet Commandsがサポートしているエンコーディングは,Shift_JIS (14) とUTF-8 (15) だけです。

ISO-2022-JPはサポートされていませんが,Shift_JISを指定すれば,メールサーバーがISO-2022-JPに変換してくれます。

逆に,ISO-2022-JPを指定すると,文字化けしたメールがそのまま届いてしまう恐れがあります。

追加情報

通常,プラグインのメジャーバージョンは本体と合致している必要がありますが,v15/v16については,例外的に,相互のInternet Commandsを使用することができます。

miyako

投稿数 : 272
登録日 : 2016/07/05

トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可