- PR -

メール送信で添付ファイル名の文字化けが起こる(VB2008)

投稿者投稿内容
moribun
会議室デビュー日: 2008/10/09
投稿数: 4
投稿日時: 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()
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-10-09 23:38
VS2005(C#)でですが、同じやり方で送信してみました。

yahooとgmailと自分のアドレスあてに送付してみましたが、yahooは化けていましたがgmailと自分のアドレス(秀丸メール)では送付した日本語のファイル名で受信できました。

受信するメーラーやサイト側のシステムに依存するのかもしれませんね。
moribun
会議室デビュー日: 2008/10/09
投稿数: 4
投稿日時: 2008-10-10 07:58
ご返信ありがとうございます。

当方も環境によっては表示されたりされなかったりです。
ちなみに、OE6はNGでした。
Yahoo!Mailの最新版(β版)とWindowsMailでは問題ありませんでした。

何か良い方法はないものですかね・・・
最悪の回避策としては添付する前に半角英数文字のみのZIPファイルに
してから出すしかないですかね・・・

できればそのまま添付したいのですが・・・
ゆうま♪
会議室デビュー日: 2008/10/10
投稿数: 1
投稿日時: 2008-10-10 11:57
添付ファイル名をBエンコードしてうまくいきませんか?
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2008-10-10 17:57
引用:

moribunさんの書き込み (2008-10-10 07:58) より:

できればそのまま添付したいのですが・・・


「そのまま」という意味がよくわかりませんが(汗)。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
moribun
会議室デビュー日: 2008/10/09
投稿数: 4
投稿日時: 2008-10-10 20:12
引用:

shimixさんの書き込み (2008-10-10 17:57) より:

「そのまま」という意味がよくわかりませんが(汗)。MIME(Bエンコーディング)であれば、大多数のメーラで化けずに処理できると思います。




言葉足らずですみません。。。
圧縮ファイルにしないで、元のファイル名(2バイト文字)で送りたいと思っております。
ファイル名のみBエンコードとあるのですが、ファイルを添付するときにファイル名のみ
エンコードはどのようにやるのでしょうか?
今現在、ソース上では

Msg.Attachments.Add(AttachData)

によって添付ファイルにしております。。。

いかわさくら
会議室デビュー日: 2008/10/10
投稿数: 2
投稿日時: 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 ]
moribun
会議室デビュー日: 2008/10/09
投稿数: 4
投稿日時: 2008-10-11 01:18
帰宅してしまったのでWindowsMail(正常に表示)の環境しかありませんが・・・
これで参考になるでしょうか。

Content-Type: application/octet-stream; name="=?utf-8?B?(省略)"
Content-Dispositionヘッダはありません・・・

スキルアップ/キャリアアップ(JOB@IT)