【告知】Internet Commandによるメール送信について
【告知】Internet Commandによるメール送信について
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を使用することができます。
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- 投稿数 : 487
登録日 : 2016/07/05
Permissions in this forum:
返信投稿: 不可