C:\Users\ユーザ\Documents\Visual Studio 20XX\Templates\ProjectTemplates\Visual C# に保存して下さい( TKMP.DLL 同梱 ) ※ TKMP.DLL は 32ビット用です。
![]()
テンプレートが古いので、Microsoft の SMTP サーバーは pop-mail.outlook.com に変更して下さい 久しぶりにメールの処理の検証をしてみようと、最新(周辺)の Microsoft の Framework をチェックしてみたのですが、相変わらず標準的なものはなさそうなので、最新の TKMP.DLL で検証してみました。TKMP.DLL は運用はした事がありませんが、メール送信に非同期処理が無い事を除いて、たいていは間に合いそうな気がします。 しかし、いかに簡単に使えるように設計されていても、メール処理はそれなりに煩雑なので、単に『メール送信』に特化してクラスを作成しました。 メールは Hotmail でなくても使えますが、送信用のクラスを作成する為のテストに Hotmail を使って行い、Hotmail の特性に従ってエラー処理もしています。 Hotmail を使用する場合は、ひとつ注意が必要で、エラーになる原因としてメールサービスがスパム対策として確認用の画像を読ませてログインさせようとする場合があるようです。 MailClass.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using TKMP.Writer; using TKMP.Net; namespace TKMP_SendMail_Sakura1 { class MailClass { private MailWriter mw = null; public string SmtpServer { get; set; } public int Port { get; set; } public string User { get; set; } public string Pass { get; set; } public AuthenticationProtocols Protocol { get; set; } private string err_message = ""; public class MailClassErrorArg { public string Message { get; set; } } public delegate void MailClassError(MailClassErrorArg e); public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J, MailClassError mce) { bool bResult = true; mw = new MailWriter(); try { mw.ToAddressList.Add(To); } catch (Exception ex) { bResult = false; } if (!bResult) { if (mce != null) { MailClassErrorArg e = new MailClassErrorArg() { Message = "宛先が正しくありません" }; mce(e); } return bResult; } // From が未指定や正しくない文字列の場合 try { mw.FromAddress = From; } catch (Exception ex) { // ユーザが正しければ、以下のように設定しても『ユーザ名 <メールアドレス>』に変換される mw.FromAddress = "______@hotmail.co.jp"; } TextPart tp = new TextPart(Body); mw.MainPart = tp; if (To_J != null) { mw.Headers.Add("To", To_J + " <" + To + ">"); } else { mw.Headers.Add("To", To); } if (From_J != null) { mw.Headers.Add("From", From_J + " <" + From + ">"); } else { // Hotmail では、自動的に 『ユーザ名 <メールアドレス>』に変換される mw.Headers.Add("From", From); } mw.Headers.Add("Subject", Subject); mw.Headers.Add("X-Mailer", "TKMP Version 3.1.2"); var logon = new TKMP.Net.AuthLogin(User, Pass); SmtpClient sc = new SmtpClient(SmtpServer, Port, logon); sc.AuthenticationProtocol = Protocol; try { if (!sc.Connect()) { err_message = "接続に失敗しました"; bResult = false; } else { sc.SendMail(mw); sc.Close(); } } catch (Exception ex) { err_message = ex.Message; bResult = false; } if (!bResult) { if (mce != null) { MailClassErrorArg e = new MailClassErrorArg() { Message = err_message }; // このメソッドの引数である、ErrorHandler デリゲートを呼び出す mce(e); } } return bResult; } public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J) { return SendMail(To, From, Subject, Body, To_J, From_J, null); } public bool SendMail(string To, string From, string Subject, string Body) { return SendMail(To, From, Subject, Body, null, null, null); } } }
エラー処理は、引数にデリゲートを渡す仕様にしているので、Java の 引数へのインターフェイス渡しのような感じで『ラムダ式』を使ってその場で記述する事を想定しています。 これによって、細かいエラー情報が必要な場合は記述し、そうでない場合はオーバーロードされた引数の少ないメソッドを使って成功が失敗かだけをチェックすればいいようになっています。 Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Mail; using System.Net; using TKMP.Writer; using TKMP.Net; namespace TKMP_SendMail3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MailClass mc = new MailClass() { SmtpServer = "smtp.live.com", Port = 587, User = "ユーザ名@hotmail.co.jp", Pass = "パスワード", Protocol = AuthenticationProtocols.TLS }; var result = mc.SendMail( "宛先メールアドレス", "ユーザ名@hotmail.co.jp", this.subject.Text, this.body.Text, null, // 必要な場合、宛先を日本語で null, // 必要な場合、差出人を日本語で (MailClass.MailClassErrorArg _e) => { this.error.Text = _e.Message; } ); if (result) { MessageBox.Show("メールを送信しました"); } } } }
Hotmail の仕様に関しては、正式には 『Outlook.com の POP、IMAP、および SMTP の設定』というページにありますIMAP サーバー名: imap-mail.outlook.com IMAP ポート: 993 IMAP 暗号化方法: TLS POP サーバー名: pop-mail.outlook.com POP ポート: 995 POP 暗号化方法: TLS SMTP サーバー名: smtp-mail.outlook.com SMTP ポート: 587 SMTP 暗号化方法: STARTTLS一般的にどこのメールサービスでも、TLS または SSL と書かれていますが、TLS で 587、SSL で 465 です。( このへんはかなり仕様がわかり難いです / Microsoft は、TLS のみ。Google は、両方。他は SSL のみだったり ) メッセージのソースの様子 ( ソースは GMail で確認するのが一番良さそうです )
From: =?iso-2022-jp?B?GyRCOjk9UD9NGyhCQg==?= <______@hotmail.co.jp> To: =?iso-2022-jp?B?GyRCMDhAaBsoQkI=?= <______@gmail.com> Date: Tue, 23 Jul 2013 20:10:15 +0900 MIME-Version: 1.0 Subject: =?iso-2022-jp?B?GyRCN29MPhsoQg==?= X-Mailer: TKMP Version 3.1.2 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit $BK\J8$N(B $BFbMF(B
Gmail 用テンプレートコードは同じですが、smtp サーバーが、『smtp.gmail.com(TLS/587)』になります。ユーザは、Hotmail ではメールアドレスでしたが、Gmail では、ユーザ名部分だけで認証します(メールアドレスでもOKなはずです)。 安全性の低いアプリの許可を『有効』にします Nifty 用テンプレート
同様に、コードは同じです。smtp サーバーは、『smtp.nifty.com(SSL/465)』になります。ユーザは、NiftyID を使用したメールアドレスを使いますが、From では通常の別名を使用します。 Yahoo 用テンプレート
同様です。smtp サーバーは、『smtp.mail.yahoo.co.jp(SSL/465)』になります。アカウントは、「@yahoo.co.jpより前の部分」となります。 関連する記事 (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート さくらインターネット用
C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート
- C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (4)