- - PR -
メール送信で添付ファイル名の文字化けが起こる(VB2008)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-09 18:16
発投稿させていただきます・・・
VB2008にてメール送信プログラムを作成していて、 Subject等の日本語表記についてはいろいろと調べた結果 解決したのですが、添付ファイルの日本語ファイル名だけ どうしても文字化けしてしまいます。。。 ファイルを添付する箇所のコードは以下のようにしています。 どなたか解決策をご教授ください。 # 参照元記事URLを参考に作成しました。 Dim Msg As New System.Net.Mail.MailMessage() Dim AttachData As New System.Net.Mail.Attachment("<フルパスファイル名>") Dim SmtpMail As New System.Net.Mail.SmtpClient() Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("iso-2022-jp") Msg.From = New System.Net.Mail.MailAddress("aaa@yahoo.co.jp") Msg.To.Add(New System.Net.Mail.MailAddress("bbb@yahoo.co.jp") Msg.Subject = "subject" Dim htmlView = _ System.Net.Mail.AlternateView.CreateAlternateViewFromString( _ "本文いろいろ", _ enc, _ System.Net.Mime.MediaTypeNames.Text.Plain) htmlView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit Msg.AlternateViews.Add(htmlView) Msg.Attachments.Add(AttachData) SmtpMail.Host = "locahost" SmtpMail.Send(Msg) Msg.Dispose() | ||||
|
投稿日時: 2008-10-09 23:38
VS2005(C#)でですが、同じやり方で送信してみました。
yahooとgmailと自分のアドレスあてに送付してみましたが、yahooは化けていましたがgmailと自分のアドレス(秀丸メール)では送付した日本語のファイル名で受信できました。 受信するメーラーやサイト側のシステムに依存するのかもしれませんね。 | ||||
|
投稿日時: 2008-10-10 07:58
ご返信ありがとうございます。
当方も環境によっては表示されたりされなかったりです。 ちなみに、OE6はNGでした。 Yahoo!Mailの最新版(β版)とWindowsMailでは問題ありませんでした。 何か良い方法はないものですかね・・・ 最悪の回避策としては添付する前に半角英数文字のみのZIPファイルに してから出すしかないですかね・・・ できればそのまま添付したいのですが・・・ | ||||
|
投稿日時: 2008-10-10 11:57
添付ファイル名をBエンコードしてうまくいきませんか?
| ||||
|
投稿日時: 2008-10-10 17:57
「そのまま」という意味がよくわかりませんが(汗)。MIME(Bエンコーディング)であれば、大多数のメーラで化けずに処理できると思います。 #本来はRFC2231で書くべきですが、非対応メーラが多いので・・。 SJISやUTF-8を生のまま入れるメーラはさすがにないハズですが、受け取ったメールの扱いとしては生のままの日本語でもちゃんと処理できるメーラは意外と多いんですね(だからといって甘えていてはいけませんが・・)。 まぁ今現在でもBエンコーディングが一般的でしょう。 (参考) http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html (「添付ファイル名」の項) http://www.emaillab.org/essay/japanese-filename.html | ||||
|
投稿日時: 2008-10-10 20:12
言葉足らずですみません。。。 圧縮ファイルにしないで、元のファイル名(2バイト文字)で送りたいと思っております。 ファイル名のみBエンコードとあるのですが、ファイルを添付するときにファイル名のみ エンコードはどのようにやるのでしょうか? 今現在、ソース上では Msg.Attachments.Add(AttachData) によって添付ファイルにしております。。。 | ||||
|
投稿日時: 2008-10-10 20:25
メールの添付ファイルの形式を定めたRFC2045は、ファイル名に2バイト文字を使うことを全く考慮していませんでした。
しかし、「ファイル名に2バイト文字を使いたい」という需要はあったので、仕方なく各メーラーが独自の実装をしたため、「メーラーが違うと添付ファイル名が化ける」という事態が頻発しました。 そこで、1997年にRFC2231が提出され、めでたく添付ファイル名に2バイト文字が使えるようになった…と思いきや、これがどのメーラーも実装していない仕様だったため、普及が遅れました。 shimixさんが挙げられた2つの記事はどちらも書かれてかなり経っていますが、Outlook ExpressがRFC2231をサポートしなかったこともあり、未だにこの混乱は続いています。 受信したメールのContent-TypeヘッダとContent-Dispositionヘッダをここに晒していただけると議論が進むと思います。 [ メッセージ編集済み 編集者: いかわさくら 編集日時 2008-10-10 20:27 ] | ||||
|
投稿日時: 2008-10-11 01:18
帰宅してしまったのでWindowsMail(正常に表示)の環境しかありませんが・・・
これで参考になるでしょうか。 Content-Type: application/octet-stream; name="=?utf-8?B?(省略)" Content-Dispositionヘッダはありません・・・ |