元アドレス:http://www.atmarkit.co.jp/fdotnet/dotnettips/017sendmail/sendmail.html
C#やVB.NETのプログラムからインターネット電子メールを送信する場合には、SmtpMailクラス(System.Web.Mail名前空間)のSendメソッドを使用する。このクラスは、「Web」という文字列が入っている名前空間に属しているが、Webアプリケーションだけでなく、どのような種類のプログラム中からも利用できる。例えば、Windowsアプリケーションやコンソール・アプリケーションから利用しても問題ない。
このSmtpMailクラスは、もともとOSに組み込まれているCDOSYS(Collaboration Data Objects for Windows 2000)メッセージ コンポーネントを使用してメッセージを送信するもので、このクラス自身が電子メールの送信機能を持っているわけではない。このため、OSよりこの機能を取り除くような操作を行っている場合、このクラスを通して電子メールを送信できない可能性がある。
このクラスは、クラス・ライブラリのDLLであるSystem.Web.dllの中に含まれているので、これが参照されていない場合は参照をプロジェクトに追加する必要がある。Visual Studio .NETではメニューの[プロジェクト]-[参照の追加]を実行して、System.Web.dllを追加する。コマンドラインからコンパイルする場合は、cscコマンドやvbcコマンドで、/r:System.Web.dllというオプションを追加する。
Sendメソッドでは、次のようにして電子メールを送信することができる。
System.Web.Mail.SmtpMail.Send( _ "system@sample.domain", _ "kodai@sample.domain", _ "プログラムから送信する電子メール", _ "この電子メールはプログラムから送信しています。" & vbCrLf _ & "これは本文の2行目です" & vbCrLf)
|
|
電子メールを送信するためのコード(Visual Basic .NET版) |
System.Web.Mail.SmtpMail.Send( "system@sample.domain", "kodai@sample.domain", "プログラムから送信する電子メール", "この電子メールはプログラムから送信しています。/r/n" + "これは本文の2行目です/r/n");
|
|
電子メールを送信するためのコード(C#版) |
見て分かるとおり、たった1つのメソッド呼び出しを記述するだけで電子メールの送信が実現できている。メソッドのパラメータには、上から順に次の項目を文字列で指定する。
- 送信者のメール・アドレス
- 受信者のメール・アドレス
- 件名(Subject)
- 本文
この方法で送信すると、プレーン・テキストの電子メールとして送信されるので、HTMLのタグなどを記述する意味はない。
本文に渡す文字列は、電子メールの仕様が要求する制限を意識して記述する必要がある。1行の文字数は改行を含まないで78文字以下であるべきで、998文字を超えてはならない。また、改行は「復帰(CR)+改行(LF)」というシーケンスでなければならない。VB.NETではvbCrLfを、C#では"/r/n"を使用するとよいだろう(RFC 2822参照)。
さて、この方法を使用した場合、電子メールは、そのプログラムを実行しているWindows上で稼働するIISのSMTP機能を経由して送信される。IISが使用するInetpub/mailroot/Pickupディレクトリに送信したいメール本体が書き込まれ、それをIISのSMTP機能が拾い上げて送信してくれるわけである。そのため、IISがインストールされていなかったり、SMTP機能が停止されていたりする場合には、電子メールを送信することができない(ただし次項で述べているように、SmtpServerプロパティを利用すれば、この方法でもIISのSMTP機能を使用せずに電子メールの送信が可能)。
より高度な電子メール送信
SmtpMailクラスのSendメソッドには、オーバーロードされたもう1つのバリエーションがある。これを用いると、よりきめ細かく電子メールの内容を指定することができる。このバリエーションは、パラメータに4つの文字列ではなく、MailMessageクラス(System.Web.Mail名前空間)のインスタンスを1つだけ渡すようになっている。きめ細かい条件は、このインスタンスに設定することができる。あて先をCcに指定したり、添付ファイルを付けたりすることも可能だ。以下にこれを使用した例を示す。
System.Web.Mail.SmtpMail.SmtpServer = "tina.sample.domain"
Dim message As New System.Web.Mail.MailMessage() message.From = "system@sample.domain" message.To = "kodai@sample.domain; shima@sample.domain" message.Cc = "okita@sample.domain; mori@sample.domain" message.Subject = "プログラムから送信する電子メール" message.BodyEncoding = System.Text.Encoding.UTF8 message.BodyFormat = System.Web.Mail.MailFormat.Html
message.Body = "<html><body><p>この電子メールはプログラムから送信しています。</p>" & vbCrLf _ & "<p>これは本文の2行目です</p></body></html>" & vbCrLf
System.Web.Mail.SmtpMail.Send(message)
|
|
より詳細な設定で電子メールを送信するためのコード(Visual Basic .NET版) |
System.Web.Mail.SmtpMail.SmtpServer = "tina.sample.domain";
System.Web.Mail.MailMessage message = new System.Web.Mail.MailMessage(); message.From = "system@sample.domain"; message.To = "kodai@sample.domain; shima@sample.domain"; message.Cc = "okita@sample.domain; mori@sample.domain"; message.Subject = "プログラムから送信する電子メール"; message.BodyEncoding = System.Text.Encoding.UTF8; message.BodyFormat = System.Web.Mail.MailFormat.Html;
message.Body = "<html><body><p>この電子メールはプログラムから送信しています。</p>/r/n" + "<p>これは本文の2行目です</p></body></html>/r/n";
System.Web.Mail.SmtpMail.Send(message);
|
|
より詳細な設定で電子メールを送信するためのコード(C#版) |
ここではまず、SmtpMailクラスのSmtpServerプロパティに、"tina.sample.domain"を代入している。これは、メール送信に使用するSMTPサーバを独自に指定する方法を示している。すでに述べたように、通常はIISのSMTP機能を経由して送信されるが、このプロパティに使用したいSMTPサーバを指定しておくと、それを経由して送信されることになる。このSmtpServerプロパティは、前の例で使用した4つの文字列をパラメータに取るSendメソッドでも有効である。
さて、次がメール本体の作成である。まず、MailMessageクラスのインスタンスを作成し、そのプロパティでメールに必要な情報を設定していく。各プロパティの設定は次のようになっている。
・Fromプロパティ
送信者の電子メール・アドレスを記述する。
・Toプロパティ
送信先の電子メール・アドレスを記述する。複数ある場合はセミコロンで区切って続けて記述することができる。このルールは次のCcプロパティなどでも同じである。
・Ccプロパティ
カーボン・コピーのあて先となる電子メール・アドレスを記述する。
・Subjectプロパティ
件名(Subject)を記述する。
・BodyEncodingプロパティ
電子メールの本文に使用する文字のエンコーディング方式を指定する。ここにはEncodingクラス(System.Text名前空間)のインスタンスを指定する。この例ではUTF-8を指定しているが、日本語の電子メールでは通常ISO-2022-JPを使用する(System.Text.Encoding.UTF8の代わりにSystem.Text.Encoding.GetEncoding("ISO-2022-JP")を使用する)。Encodingクラスについては、TIPS: Encodingクラスで扱えるエンコーディング名は?で解説している。
・BodyFormatプロパティは、
MailFormat列挙体(System.Web.Mail名前空間)の値により、メッセージのフォーマットを指定する。MailFormat.HtmlならHTMLメールであることを示す。MailFormat.Textなら、プレーン・テキストのメールであることを示す。
・Bodyプロパティ
このプロパティには本文を指定するが、BodyFormatプロパティでMailFormat.Htmlを指定した場合は、正しくHTMLメールとなるような文字列を設定する必要がある(この例は、本来省略できないhead要素を記述していないなど、厳密にいうとあまり正しいHTMLになっていない)。
電子メールに添付ファイルを添付する場合
最後に、メールに添付ファイルを添付する場合についても少し触れておこう。これには上記のコードの最後にあるSendメソッド呼び出しの直前に、次のようなコードを追加すればよい。ここでは画像ファイル(c:/sample.png)を添付ファイルとしている。
Dim attachment As New System.Web.Mail.MailAttachment( _ "c:/sample.png", _ System.Web.Mail.MailEncoding.Base64) message.Attachments.Add(attachment)
|
|
添付ファイルを添付するためのコード(Visual Basic .NET版) |
System.Web.Mail.MailAttachment attachment = new System.Web.Mail.MailAttachment( @"c:/sample.png", System.Web.Mail.MailEncoding.Base64); message.Attachments.Add(attachment);
|
|
添付ファイルを添付するためのコード(C#版) |
添付ファイルは、MailAttachmentクラス(System.Web.Mail名前空間)を用いて指定する。1つの添付ファイルにつき、このクラスのインスタンスを1つ作成する。そして、MailMessageオブジェクト(上記のコードでは変数message)のAttachmentsプロパティに、これらのインスタンスをAddメソッドで追加するのである。これにより、Sendメソッドで送信されるときに、指定された添付ファイルが添付される。
では、具体的に添付ファイルの内容はどうやって指定するのだろうか。それには、MailAttachmentクラスのコンストラクタのパラメータを使う。このコンストラクタには、ファイル名のみを渡すものと、ファイル名とエンコード方式を渡すものの2つのバリエーションが存在する。
後者の方のコンストラクタを使う場合、エンコード方式の指定には、MailEncoding列挙体(System.Web.Mail名前空間)を使用する。ここには、Base64方式を意味するMailEncoding.Base64とuuencode方式を意味するMailEncoding.UUEncodeの値を指定することができる。しかし、uuencode方式はRFCで定義されたエンコード方式ではないので、特に必要がなければ、使用しない方がよいだろう(コンストラクタでファイル名のみを指定する場合、リファレンス・マニュアルには「既定では、EncodingプロパティはUUEncodeに設定されます」と記述されているが、筆者が試したところ実際にはBase64方式が既定となっているようだ。方式を厳密に指定したい場合には、省略しない方が安全だろう)。
なお、ここでいうエンコードと、BodyEncodingプロパティでいうエンコードは意味が異なることに注意しなければならない。前者は、バイナリ・データをテキストで表現することを意味し、後者は文字をどのようなビット列で表現するかを意味する。
分享到:
相关推荐
Asp.Net 发送邮件(Email) 实例 代码 亲测 可用,自己封装的一个发送邮件的类,希望高手多多指点。
vb.net发送邮件,outlook express发送邮件,.net邮件发送,
.net 发送邮件demo 框架3.5 使用System.Net.Mail 下的MailMessage,SmtpClient实现发送邮件的功能 有普通发送,SSL加密发送等方式 http://www.heycoder.com/noteinfo8.aspx
基本的邮件发送 可以发送邮件 如QQ邮件 网易邮件 VB.NET 发送邮件 源码DEMO
.net 465端口发送邮件,开发过程中,经常会使用到发送邮件功能,而我们在使用阿里云服务器发送邮件时,由于安全原因,阿里云禁用掉了25端口,于是就造成了我们在本地使用25端口发送邮件时是好的,一放到服务器上就...
.NET发送邮件程序.NET发送邮件程序.NET发送邮件程序.NET发送邮件程序.NET发送邮件程序.NET发送邮件程序
C# asp.net 发送邮件 注册验证 完整源码
asp.net发送邮件源码 发送人的邮箱地址,邮箱密码,SMTP服务器设置正确即可发送邮件。
ASP.NET发送邮件,C#发送邮件,发送电子邮件方法,绝对能使用。
经过仔细研究才发现用.net发送电子邮件是很简单的一件事情.现在我们就来看一下. 首先添加命名空间 Using System.Net.Mail 下面我们看发送邮件的代码部分:(注意:网易的邮件服务器是 smtp.163.com) MailAddress from ...
.net代码实现邮件发送,邮件发送,邮件 .net代码实现邮件发送,邮件发送,邮件 .net代码实现邮件发送,邮件发送,邮件 .net代码实现邮件发送,邮件发送,邮件
Asp.net发送邮件
ASP.NET免费发送邮件代码
ASP.net发送邮件的实例 如何利用asp.net进行邮件发送!!
asp.net 发送邮件.实现群发功能,解决了群发后能看见所有人地址的bug
ASP.NET 发送电子邮件 输入邮箱 定时发送也行
.net发送邮件实例
.net发送邮件的基础代码,可以方便的实现使用.net工具来发送邮件
.net 发送邮件的例子 自己看看 用自己的邮箱试试 可以验证用户注册
asp.net 发送邮件 smtp 源码 asp.net 发送邮件 smtp 源码