DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SMTP-AUTHでのメール送信 その2

環境/言語:[windowsXP/VB.NET/Framework1.0]
分類:[.NET]

はじめまして、つねです。
メールの送信をSmtpMailクラスで実装していたのですが、
どうしてもSMTP-AUTHでの送信ができなく、調べていたら過去記事に
サンプルがあったので拝見させてもらいました。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=8968&rev=&no=0
で、解決済みで申し訳ないのですが、サンプルソースで実装されている手法で
添付ファイルを付けるためにはどうすればいいのでしょうか?
本文を送信している SendData(stream, data)のdataにContent-*****みたいな
文字列を追加すればいいと思っていろいろ試したのですが、実現しません。
素人問題で申し訳ありませんが宜しくお願いします。
こんにちは、じゃんぬねっと です。

■No9318に返信(つねさんの記事)
> 添付ファイルを付けるためにはどうすればいいのでしょうか?
> 本文を送信している SendData(stream, data)のdataにContent-*****みたいな
> 文字列を追加すればいいと思っていろいろ試したのですが、実現しません。
> 素人問題で申し訳ありませんが宜しくお願いします。

System.Web.Mail.MailAttachment のコンストラクタで添付ファイルを指定し、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebmailmailattachmentclassctortopic.asp

System.Web.Mail.MailMessage.Attachments.Add([上記の MailAttachment のインスタンス]);
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebmailmailmessageclassattachmentstopic.asp

で、ダメなんでしょうか? (試していませんが)
じゃんぬねっと さん 返信ありがとうございます。

MailMessageクラスにアタッチして添付ファイルを付ける事は可能なのですが、
結果的にSmtpMailクラスを使う事になります。
↓こんな感じになりますよね?
attachment = New MailAttachment(fileName,MailEncoding.Base64)
message.Attachments.Add(attachment)
SmtpMail.Send(message)

これではSMTP-AUTHでのメール送信ができないんです…
勘違いしていたらごめんなさい、宜しくお願いします。
> で、解決済みで申し訳ないのですが、サンプルソースで実装されている手法で
> 添付ファイルを付けるためにはどうすればいいのでしょうか?

かなり雑ですが、サンプルを書いて見ました。attachmentFileNameにファイル名、attachmentBytesにファイルの中身が入っているものとします。MIMEについての知識がおありだろうと思いますので(もしないのであれば、この方法はあきらめてください)、詳しい説明はしませんし、このコードがどれだけいい加減かということもお分かりいただけるでしょう。

//本文
string data = "";
data += "From:" + mail.From + "\r\n";
data += "To:" + mail.To + "\r\n";
//件名をBase64でエンコード
data += "Subject:=?ISO-2022-JP?B?" +
GetBase64String(mail.Subject) + "?=" + "\r\n";
data += "MIME-Version: 1.0\r\n";
data += "Content-Transfer-Encoding: 7bit\r\n";

//添付ファイルの処理
string boundary = "Boundary_" + DateTime.Now.Ticks.ToString();
data += "Content-Type: multipart/mixed; boundary=\"" +
boundary + "\"\r\n\r\n";
data += "--" + boundary + "\r\n";

data += "Content-type: text/plain; charset=ISO-2022-JP\r\n";

data += "\r\n" +
mail.Body.Replace("\r\n.\r\n", "\r\n..\r\n")
+ "\r\n";

data += "--" + boundary + "\r\n";
data += "Content-Type: application/octet-stream; name=\"" +
attachmentFileName + "\"\r\n";
data += "Content-Transfer-Encoding: Base64\r\n";
data += "Content-Disposition: attachment; filename=\"" +
attachmentFileName + "\"\r\n\r\n";

string attachmentBase64 = Convert.ToBase64String(attachmentBytes);
int startPos = 0, lineLen = 72;
do
{
if (startPos + lineLen < attachmentBase64.Length)
data += attachmentBase64.Substring(startPos, lineLen) + "\r\n";
else
data += attachmentBase64.Substring(startPos) + "\r\n";
startPos += lineLen;
} while (startPos < attachmentBase64.Length);
data += "\r\n";

data += "--" + boundary + "--\r\n";
//添付ファイルの処理終了

data += ".\r\n";
すみません。VB.NETでしたね。C# to VB.NET Translatorで変換してください。

http://authors.aspalliance.com/aldotnet/examples/translate.aspx
■No9350に返信(管理人さんの記事)
> すみません。VB.NETでしたね。C# to VB.NET Translatorで変換してください。
>
> http://authors.aspalliance.com/aldotnet/examples/translate.aspx

管理人さん ありがとうございます!!
先ほど実装してテストしてみたところ、無事添付ファイルを
送信できました!感動です。
お世話になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板