注意:ここで紹介しているコードを実際に使用する場合は、送信者、送信先などを必ず変更してください。
注意:SmtpClientクラスは、.NET Framework 2.0以降でしか使用できません。また、ここではSmtpClientクラスについて詳しくは説明しませんので、まずは「SmtpClientクラスを使ってメールを送信する」をご覧ください。
SmtpClientクラスでメールを送信する時、SSL/TLSを使用するには、SmtpClient.EnableSslプロパティをTrueにします。MSDNによると、対応している方式はSTARTTLSのみで、SMTP over SSL(SMTP/SSL、SMTPS)には対応していません。
補足:.NET Frameworkの古いバージョンでは、Credentialsプロパティを設定し、EnableSslプロパティをtrueにすると失敗するという報告がありましたが(例えば、「Cannot enable SSL with a username and password.」)、事実かどうかは未確認です。
以下の例では、GoogleのGmailを使用してメールを送信しています。ポート番号は、587を使用します(STARTTLSですので、465は使えません)。なお認証の方法については、「SMTP認証でメールを送信する」をご覧ください。
'Gmailでメールを送信する 'MailMessageの作成 Dim msg As New System.Net.Mail.MailMessage( _ "xxx@gmail.com", "yyy@gmail.com", _ "テスト", "このメールは、テストです。") Dim sc As New System.Net.Mail.SmtpClient() 'SMTPサーバーなどを設定する sc.Host = "smtp.gmail.com" sc.Port = 587 sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network 'ユーザー名とパスワードを設定する sc.Credentials = New System.Net.NetworkCredential("xxx@gmail.com", "pass") 'SSLを使用する sc.EnableSsl = True 'メッセージを送信する sc.Send(msg) '後始末 msg.Dispose() '後始末(.NET Framework 4.0以降) sc.Dispose()
//Gmailでメールを送信する //MailMessageの作成 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage( "xxx@gmail.com", "yyy@gmail.com", "テスト", "このメールは、テストです。"); System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient(); //SMTPサーバーなどを設定する sc.Host = "smtp.gmail.com"; sc.Port = 587; sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; //ユーザー名とパスワードを設定する sc.Credentials = new System.Net.NetworkCredential("xxx@gmail.com", "pass"); //SSLを使用する sc.EnableSsl = true; //メッセージを送信する sc.Send(msg); //後始末 msg.Dispose(); //後始末(.NET Framework 4.0以降) sc.Dispose();
MSNのHotmailでも同じように送信できます。ポート番号はやはり587です。
'Hotmailでメールを送信する 'MailMessageの作成 Dim msg As New System.Net.Mail.MailMessage( _ "xxx@hotmail.com", "yyy@hotmail.com", _ "テスト", "このメールは、テストです。") Dim sc As New System.Net.Mail.SmtpClient() 'SMTPサーバーなどを設定する sc.Host = "smtp.live.com" sc.Port = 587 sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network 'ユーザー名とパスワードを設定する sc.Credentials = New System.Net.NetworkCredential("xxx@hotmail.com", "pass") 'SSLを使用する sc.EnableSsl = True 'メッセージを送信する sc.Send(msg) '後始末 msg.Dispose() '後始末(.NET Framework 4.0以降) sc.Dispose()
//Hotmailでメールを送信する //MailMessageの作成 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage( "xxx@hotmail.com", "yyy@hotmail.com", "テスト", "このメールは、テストです。"); System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient(); //SMTPサーバーなどを設定する sc.Host = "smtp.live.com"; sc.Port = 587; sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; //ユーザー名とパスワードを設定する sc.Credentials = new System.Net.NetworkCredential("xxx@hotmail.com", "pass"); //SSLを使用する sc.EnableSsl = true; //メッセージを送信する sc.Send(msg); //後始末 msg.Dispose(); //後始末(.NET Framework 4.0以降) sc.Dispose();
上記のようにしてメールを送信する時に使用されるSSL/TLSのバージョンは、ServicePointManager.SecurityProtocolプロパティで設定されたものになります。デフォルトの値は「SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls」で、SSL3.0かTLS1.0を使用します。ただこの場合でも、SSL3.0しか対応していないサーバーでは自動的にSSL3.0が選択されるという訳ではなく、TLSを使ってエラーが発生することがあるようです(「Set the SecurityProtocol (Ssl3 or TLS) on the .net HttpWebRequest per request」より)。そのため、もしSSL3.0しか使えないのであれば、ServicePointManager.SecurityProtocolプロパティを「SecurityProtocolType.Ssl3」のみにしておいた方がよさそうです。
なおServicePointManager.SecurityProtocolプロパティはアプリケーションドメイン毎の設定であり、接続毎の設定ではありません。
'SSL3.0しか使わないようにする System.Net.ServicePointManager.SecurityProtocol = _ System.Net.SecurityProtocolType.Ssl3 Dim msg As New System.Net.Mail.MailMessage( _ "xxx@hotmail.com", "yyy@hotmail.com", _ "テスト", "このメールは、テストです。") Dim sc As New System.Net.Mail.SmtpClient() sc.Host = "smtp.live.com" sc.Port = 25 sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network sc.Credentials = New System.Net.NetworkCredential("xxx@hotmail.com", "pass") 'SSLを使用する sc.EnableSsl = True sc.Send(msg) msg.Dispose() sc.Dispose()
//SSL3.0しか使わないようにする System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3; System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage( "xxx@hotmail.com", "yyy@hotmail.com", "テスト", "このメールは、テストです。"); System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient(); sc.Host = "smtp.live.com"; sc.Port = 25; sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; sc.Credentials = new System.Net.NetworkCredential("xxx@hotmail.com", "pass"); //SSLを使用する sc.EnableSsl = true; sc.Send(msg); msg.Dispose(); sc.Dispose();
.NET Framework 1.1からは、MailMessageクラスのFieldsプロパティを使用することにより、SSLを使ってメールの送信ができます。この場合は、STARTTLSではなく、SMTP over SSLとなるようです。
なおSmtpMailクラスを使ってメールを送信する基本的な方法は、「SMTPでメールを送信する」をご覧ください。
以下に、Gmailでメールを送信する例を示します。ポート番号は、465にします(587では送信できません)。なお認証の方法については、「SMTP認証でメールを送信する」をご覧ください。
'Gmailでメールを送信する Dim mail As New System.Web.Mail.MailMessage() mail.From = "xxx@gmail.com" mail.[To] = "yyy@gmail.com" mail.Subject = "テスト" mail.Body = "これはテストです。" '認証を使用する mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/sendusing") = _ 2 mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ "smtp.gmail.com" mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/smtpserverport") = _ 465 mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = _ 1 'ユーザー名 mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/sendusername") = _ "xxx@gmail.com" 'パスワード mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/sendpassword") = _ "password" 'SSLを使用する mail.Fields( _ "http://schemas.microsoft.com/cdo/configuration/smtpusessl") = _ True System.Web.Mail.SmtpMail.SmtpServer = "smtp.gmail.com" 'メールを送信 System.Web.Mail.SmtpMail.Send(mail)
//Gmailでメールを送信する System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); mail.From = "xxx@gmail.com"; mail.To = "yyy@gmail.com"; mail.Subject = "テスト"; mail.Body = "これはテストです。"; //認証を使用する mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2; mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserver"] = "smtp.gmail.com"; mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 465; mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1; //ユーザー名 mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = "xxx@gmail.com"; //パスワード mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = "password"; //SSLを使用する mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"] = true; System.Web.Mail.SmtpMail.SmtpServer = "smtp.gmail.com"; //メールを送信 System.Web.Mail.SmtpMail.Send(mail);