トップ回答者
エンコード quoted-printable について

質問
-
Exchange2007に変更してからいろいろと問題が噴出中の林です。
その中でも一番解せないのが件名のエンコード方式"quoted-printable"です。
Exchange2007の日本語エンコードは"quoted-printable"だけとなりその他は今後も対応しないという回答がMSサポートからありました。<<回答の一部抜粋>>
quoted-printable を使用した場合、自動改行を行う場合に改行コードの直前に = を入力することで、それがデコードの際に削除されるべき改行であることを受信者側に伝えることができます。そのため、受信者側では、iso-2022-jp の文字シーケンスの途中に挿入された自動改行を削除することが可能となりますので、受信したメッセージを正しく表示できるようになります。
この問題が確認できたのが、Exchange 2003 がリリースされた後になりますので、Exchange 2000 と 2003 では修正プログラムとレジストリの設定により quoted-printable で送付できるようになっておりますが、Exchange 2007 ではこの問題が確認できておりましたので、quoted-printable で送付するようになっております。また、大変恐れ入りますが、Exchange 2007 にて quoted-printable 以外で送付できることは現状困難であり、動作の修正については予定されていないことをご了承いただけますようお願いいたします。
これは仕様なのだそうです。
メールが今までと同様に送信できればまぁいいかなと思うのかもしれませんが、わりとquoted-printable のエンコードに対応していないメールサーバーなんかも多いんですよね。
たとえば、ウィルコムのエアーエッジ。これは本文が100%化けます。うちの会社ではウィルコム製PHSが標準でかなりの台数があります。現在どうするか検討中です。(苦笑)
さらにMSの製品を論議するPASSJのSQL-ServerのMLに投稿しようとしたらquoted-printableなエンコードは受け付けないという リターンメールで投稿できずでした。(さらに苦笑)
はたしてこのquoted-printableなエンコード。仕様とおりです。で済ませていいんでしょうか?2000でも2003でもこんな現象なかったんですよ。
みなさんのご意見お聞かせください。
2007年5月9日 5:48
回答
-
quoted-printable だけの対応については、ものすごく違和感を感じます。
いまだに quoted-printable だと文字化けするクライアントやリレーサーバが多数存在するのに、仕様と打ち切るのはいかがなものでしょうか?
Exchange 4.0 か 5.0 のころからこの問題があって、HotFix や Service Pack の適用で Base64 をサポートしてきたものを Exchange 2007 で打ち切りとは少々荒っぽいと思います。
私は .NET Framework 2.0 の System.Net.Mail/System.Net.Mime を使って Base64 エンコードして送る方法を探し出して、さらに Content-Transfer-Encoding: sevenbit とになるというケアレスミスのバグを発見して、MS に DCR を投げて修正してもらっています。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=264603&SiteID=7
日本ではまだまだ quoted-printable だけじゃ解決しないことがあるので、オプションでよいので設定変更で Base64 のサポートをしてほしいものです。
1 MVP として強く要望します。
2007年5月9日 7:20 -
各国の事情というのがあるというメールの現状の中で1つの仕様で全世界向けにメールを発信するわけにはいかないのです。
私も今までもSMTPやPOPの実装を行っていたり、利用していますが少なくとも日本の事情を完全に無視したこの仕様では日本のビジネス事情に合いません。
携帯電話だけでも9671万台(電気通信事業者協会の平成19年3月)ありますが、はたしてquoted-printable形式を解釈できるのでしょうか?
書かれているウィルコムだけでも450万台以上あるわけです。
PC用のメールクライアントであればサポートしている比率も高いかもしれませんが、Outlook や Windows Mailで読めるからそれでOKとはならないと思います。(インターネット人口は8529万人とか平成18年版 情報通信白書)
現時点、そしてそう近くない未来までもBase64メールの対応を強くお願いしたいです。
2007年5月9日 7:56 -
菊池です
日本ローカルの問題ではなく、自動改行に関わる他のメーラーとの互換性問題
もあります。
quoted-printable を使用した場合、自動改行を行う場合に改行コードの直前に = を入力することで、それがデコードの際に削除されるべき改行であることを受信者側に伝えることができます。
そもそも = で改行を消すのはQuated Printableのエスケープの悪用ですよね。
自動改行とそれに関する処理は RFC3676で規定されておりこれが現状の
Standard Trackだと思いますがこのスペック上では 空白文字+改行が自動改行
による軟改行となっています。そこにはエンコード方式等は関係ありません。
また、RFC-3676には以下の記載があります。
[Quoted-Printable] encoding SHOULD NOT be used with Format=Flowed
unless absolutely necessary (for example, non-US-ASCII (8-bit)
characters over a strictly 7-bit transport such as unextended
[SMTP]). In particular, a message SHOULD NOT be encoded in Quoted-
Printable for the sole purpose of protecting the trailing space on
flowed lines unless the body part is cryptographically signed or
encrypted (see Section 4.6).(RFC 3676による)自動改行を行い Quoted-Printable を使うのは 未拡張
の7bit SMTPなどトランスポートがどうにもならない場合に限るべきとなってい
ます。
そして、メッセージが暗号化もしくは暗号による署名をされている場合には
Quoted-Printable は使うべきではないともなっています。(RFC 3676による
改行制御を行ったメッセージの署名が検証できなくなる可能性がある)
RFC 3676による(他メーラとも互換性の取れる)まっとうな自動改行処理の
ためにQPができなくなった方が当然であると自分は思いますがQPのエスケープ
の悪用による独自仕様の自動改行制御のためにBase64エンコードができ
ないというのは本末転倒もはなはだしい話と思います。
2007年5月9日 8:41 -
Exchange 2007 SP1 で何やら変わったとの記述があります
2008年1月24日 8:15
すべての返信
-
quoted-printable だけの対応については、ものすごく違和感を感じます。
いまだに quoted-printable だと文字化けするクライアントやリレーサーバが多数存在するのに、仕様と打ち切るのはいかがなものでしょうか?
Exchange 4.0 か 5.0 のころからこの問題があって、HotFix や Service Pack の適用で Base64 をサポートしてきたものを Exchange 2007 で打ち切りとは少々荒っぽいと思います。
私は .NET Framework 2.0 の System.Net.Mail/System.Net.Mime を使って Base64 エンコードして送る方法を探し出して、さらに Content-Transfer-Encoding: sevenbit とになるというケアレスミスのバグを発見して、MS に DCR を投げて修正してもらっています。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=264603&SiteID=7
日本ではまだまだ quoted-printable だけじゃ解決しないことがあるので、オプションでよいので設定変更で Base64 のサポートをしてほしいものです。
1 MVP として強く要望します。
2007年5月9日 7:20 -
各国の事情というのがあるというメールの現状の中で1つの仕様で全世界向けにメールを発信するわけにはいかないのです。
私も今までもSMTPやPOPの実装を行っていたり、利用していますが少なくとも日本の事情を完全に無視したこの仕様では日本のビジネス事情に合いません。
携帯電話だけでも9671万台(電気通信事業者協会の平成19年3月)ありますが、はたしてquoted-printable形式を解釈できるのでしょうか?
書かれているウィルコムだけでも450万台以上あるわけです。
PC用のメールクライアントであればサポートしている比率も高いかもしれませんが、Outlook や Windows Mailで読めるからそれでOKとはならないと思います。(インターネット人口は8529万人とか平成18年版 情報通信白書)
現時点、そしてそう近くない未来までもBase64メールの対応を強くお願いしたいです。
2007年5月9日 7:56 -
菊池です
日本ローカルの問題ではなく、自動改行に関わる他のメーラーとの互換性問題
もあります。
quoted-printable を使用した場合、自動改行を行う場合に改行コードの直前に = を入力することで、それがデコードの際に削除されるべき改行であることを受信者側に伝えることができます。
そもそも = で改行を消すのはQuated Printableのエスケープの悪用ですよね。
自動改行とそれに関する処理は RFC3676で規定されておりこれが現状の
Standard Trackだと思いますがこのスペック上では 空白文字+改行が自動改行
による軟改行となっています。そこにはエンコード方式等は関係ありません。
また、RFC-3676には以下の記載があります。
[Quoted-Printable] encoding SHOULD NOT be used with Format=Flowed
unless absolutely necessary (for example, non-US-ASCII (8-bit)
characters over a strictly 7-bit transport such as unextended
[SMTP]). In particular, a message SHOULD NOT be encoded in Quoted-
Printable for the sole purpose of protecting the trailing space on
flowed lines unless the body part is cryptographically signed or
encrypted (see Section 4.6).(RFC 3676による)自動改行を行い Quoted-Printable を使うのは 未拡張
の7bit SMTPなどトランスポートがどうにもならない場合に限るべきとなってい
ます。
そして、メッセージが暗号化もしくは暗号による署名をされている場合には
Quoted-Printable は使うべきではないともなっています。(RFC 3676による
改行制御を行ったメッセージの署名が検証できなくなる可能性がある)
RFC 3676による(他メーラとも互換性の取れる)まっとうな自動改行処理の
ためにQPができなくなった方が当然であると自分は思いますがQPのエスケープ
の悪用による独自仕様の自動改行制御のためにBase64エンコードができ
ないというのは本末転倒もはなはだしい話と思います。
2007年5月9日 8:41 -
林です。
MVPの方々からいろんな意見を頂戴して恐縮です。
エンコードではまった現象をついでにひとつ。
Exchange2007に変更してから本文が化けているスパムメールが多くなったなぁと思っていたのでMSに調査を依頼しました。(まったく同じスパムメールがExchange2003では化けていなかったので)
送信元が特定できないと調査が難しいということになって行きづまっていたのですが、協力会社から届いたメールも文字化けしていることが判明。
確認してもらうと.Netから送信したとのこと。
確認のためExchange2003のほうへまったく同じメールを送信してもらうとまったく化けません・・・。
MSにサンプルコードと一緒にこの旨を伝え、調査してわかったことは下記のとおりです。
<<回答抜粋>>
お問い合わせいただきました現象につきまして、送付したメッセージを確認させていただいたところ、本文が Shift_JIS でエンコードされているにも関わらず、charset が iso-2022-jp となっており、本文のエンコードと charset のエンコード指定が異なっているために、Exchange 2007 で受信したメッセージが正しく表示されておりませんでした。そこで、送信元を確認していただいたところ、.net のプログラムからメッセージを送付したときに、GetEncoding を使用して本文を Shift_JIS でエンコードしているにも関わらず、charaset が shift_jis ではなく iso-2022-jp が指定されていることが原因となっていることを確認いただきました。
.Netの不具合だということで決着したのですが、これもExchange2003で文字化けしないので、なんだかなぁ~なんですよ。
スパムメールで文字化けしているのってみんな.Netで送信してるんでしょうね。
大量に送信しなきゃならんってことでプログラム書いてるんでしょうが、変に納得させられちゃいました。(笑)
参考のためサンプルつけときます。
Imports System.Net.Mail
Private Function SendMail() As Boolean
Dim message As New MailMessageTry
mailBody = mailBody & "得意先名称 御中" & ControlChars.CrLf' メッセージを作成する。
With message
.Subject = "メールテスト"
.SubjectEncoding = System.Text.Encoding.GetEncoding("shift_jis")
.BodyEncoding = System.Text.Encoding.GetEncoding("shift_jis")
.IsBodyHtml = False
.Priority = Net.Mail.MailPriority.Normal
.Body = mailBody
.From = New MailAddress("aaa@aaa.aaa", ""メールアドレス", System.Text.Encoding.GetEncoding("shift_jis"))
.To.Add(New MailAddress("aaa@aaa.aaa", ""メールアドレス", System.Text.Encoding.GetEncoding("shift_jis")))
End With' SMTPサーバを指定する。
client = New SmtpClient("xxx.xxx.xxx")
' メールを送信する。
client.Send(message)MsgBox("送信完了")
Return TrueCatch ex As SmtpException
MsgBox(ex)
Return False
Finally
message.Dispose()
End TryEnd Function
2007年5月10日 8:19 -
Exchange 2007 SP1 で何やら変わったとの記述があります
2008年1月24日 8:15 -
みなさんこんにちは。森田 知良です。
投稿してくださったみなさん、さまざまな情報をありがとうございました。
ninjinさん、フォーラムのご利用ありがとうございます。
投稿してくださったみなさんの情報は、有用な情報と思われましたので、
勝手ながら回答済みチェックをつけさせていただきました。
ninjinさんは、回答済みチェックを解除することもできますのでご確認ください。回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有効な回答があった場合は、なるべく回答済みボタンを押してチェックを付けてくださるようお願いします。それでは、これからもフォーラムのご利用をよろしくお願いいたします。
2008年4月30日 6:45