掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB2010 メール送信 添付ファイル名文字化け (ID:147724)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士 さん、ありがとうございます。 レスが遅くて誠に申し訳ありません。 > EncordB ではなく、EncodeB あるいは BEncode では無いかな…? > ご指摘ありがとうございます。 お恥ずかしい限りです。 > への変換関数を作ってみました。参考までに。 > コードのご提示ありがとうございました。 おんぶに抱っこで申し訳ないのですが、この関数をどう使ったら良いかをご教授戴けないでしょうか? 私が根本を理解していない、というのは判っているのですが何をどうすれば良いのか判らないのです。 下記コードでは【Base-64ストリームに無効な文字がある】エラーになります。 ※部αをFalseにすると(※β部を実行)受信メールの添付ファイル名が「%1B%24B%24%5B%244%24%5B%242%1B%28B.jpeg」になってしまいます。 さらにβをFalseにすると(※γ部を実行)【パスに無効な文字が含まれている】エラーになります。 さらにγをFalseにすると(※δ部を実行)受信メールの添付ファイル名が化けます。 実際には"ほごほげ.jpeg"程度の短いファイル名では化けないのですが、もっと長いファイル名 例:ほごほげほごほげほごほげほごほげ.jpeg だと化けてしまいます。 Private Sub SendMail1(ByVal MailSmtp As String, _ ByVal MailFrom As String, _ ByVal MailTo As String) Dim MailFile As String = "ほごほげ.jpeg" Dim EnCodeFile As String Dim message As New System.Net.Mail.MailMessage #If True Then '※α EnCodeFile = "=?ISO-2022-JP?B?" & Me.PercentEncode(MailFile) & "?=" Dim attachment As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(MailFile) attachment.Name = EnCodeFile #ElseIf True Then '※β EnCodeFile = Me.PercentEncode(MailFile) Dim attachment As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(MailFile) attachment.Name = EnCodeFile #ElseIf True Then '※γ EnCodeFile = "=?ISO-2022-JP?B?" & Me.PercentEncode(MailFile) & "?=" Dim attachment As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(EnCodeFile) #Else '※δ Dim attachment As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(MailFile) #End If REM attachment.NameEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp") With message .From = New System.Net.Mail.MailAddress(MailFrom) .To.Add(New System.Net.Mail.MailAddress(MailTo)) .Subject = "test" .Body = "this is test" .Attachments.Add(attachment) End With Dim client As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient(MailSmtp) client.Send(message) End Sub 'SendMail1 Private Function PercentEncode(text As String) As String Return PercentEncode(text, System.Text.Encoding.GetEncoding(50220)) '貴提示コードでは UrlEncode ですが、Overloads で下のコードをCallしていると判断しました。 End Function Private Function PercentEncode(text As String, encode As System.Text.Encoding) As String Dim ms As New System.IO.MemoryStream() Dim sw As New System.IO.StreamWriter(ms, System.Text.Encoding.ASCII) sw.AutoFlush = True For Each b In encode.GetBytes(text) Select Case b ' "0" To "9", "A" To "Z", "a" To "z", "-", ".", "_", "~" Case &H30 To &H39, &H41 To &H5A, &H61 To &H7A, &H2D, &H2E, &H5F, &H7E ms.WriteByte(b) Case Else sw.Write("%" & b.ToString("X2")) End Select Next ms.Position = 0 Return New System.IO.StreamReader(ms, System.Text.Encoding.ASCII).ReadToEnd() End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.