none
使用系統發信,附加附件卻出現亂碼

    問題

  • 我有一段發信的程式如下:

    Dim FromMail As New MailAddress('a@a.a')
    Dim mailMsg As New MailMessage()

    mailMsg.To.Add('b@b.b')
    mailMsg.From = FromMail

    mailMsg.Subject = '123'

    mailMsg.Body = '123'

    mailMsg.SubjectEncoding = System.Text.Encoding.GetEncoding("utf-8")
    mailMsg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8")

    mailMsg.IsBodyHtml = True

    mailMsg.Attachments.Add(New Attachment("C:\temp\" & File.Name)

     Dim s As New SmtpClient("219.87.151.144")
     s.Send(mailMsg)

    內容和主旨都是正常,只有附件名稱會變成亂碼,不知道在那裡可以設定附件的編碼呢?謝謝

    2010年12月21日 上午 08:31

解答

所有回覆

  • 在 Header 內出現遠東語系都要做行內編碼 (內嵌編碼) ,你可以看看這篇:

    [VBNET] 繞路解決 MailMessage 在 Header 亂編碼的 bug


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月21日 下午 03:06
  • 各位大大,不好意思,又來了
    我按照昨天前輩交的方法,設定Attachment.NameEncoding的編碼,
    但附件檔名如果是"111_第一章-公司基本概況介紹.doc" or "11_第一章-公司基本概況介紹.doc" or "1_第一章-公司基本概況介紹.doc",
    傳送郵件都ok,對方也打得開,
    如果改成"1111_第一章-公司基本概況介紹.doc" or "11111_第一章-公司基本概況介紹.doc"...依此類推
    附件名稱就變成"=_utf-8_B_MTExX+esrOS4gOeroC3lhazlj7jln7rm.dat",
    而且對方也打不開,
    同一份文件,我只是把檔名變長,但word裡的內容我都沒有變更,
    所以我個人覺得是檔名的問題,
    是檔名有限制長度嗎?還是我那裡設定有問題,
    希望大大可以解答一下,謝謝!

             '(1)寄件者
            Dim FromMail As New MailAddress("1@1.1.tw")
            Dim mailMsg As New MailMessage()

            '(2)收件者
            mailMsg.To.Add("2@2.2")
            mailMsg.From = FromMail

            '(3).主旨和內容
            mailMsg.Subject = "test"
            mailMsg.Body = "test"

            '(4).郵件內容相關設定
            mailMsg.SubjectEncoding = System.Text.Encoding.GetEncoding("utf-8")
            mailMsg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8")
            mailMsg.HeadersEncoding = System.Text.Encoding.GetEncoding("utf-8")
         

            '(5).設定附件
            Dim a As String = "C:\temp\111_第一章-公司基本概況介紹.doc"
            Dim b As Attachment = New Attachment(a,"application/msword")
            b.NameEncoding = System.Text.Encoding.GetEncoding("utf-8")
            b.TransferEncoding = Net.Mime.TransferEncoding.Base64

            mailMsg.Attachments.Add(b)

            mailMsg.IsBodyHtml = True
            Dim s As New SmtpClient("219.87.151.144")
            s.Send(mailMsg)

    2010年12月22日 上午 05:57
  • 延續同一主題發問,不必再另開新文。
    2010年12月22日 上午 06:07
  • 收件者用 OE / Windows Mail / Live Mail 收,存成 .eml ,把檔頭貼上來。

    檔名應該要是

    "=?utf-8?B?...?=

    這篇有圖可看:

    Outlook 亂碼問題

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月23日 下午 02:56
  • 不知道您解決了沒

      atta = new System.Net.Mail.Attachment(new FileStream(filepath, FileMode.Open, FileAccess.Read), attafile, MediaTypeNames.Application.Octet);

    加上這個好像OK.


    程式設計就像改裝車一樣 改了,就一頭栽進去了!

    2013年12月4日 上午 02:41