現状
お世話になります
C#でメール送信しようと思い下記のコードを書きました。
エラーもなく動作してるっぽいのですが
メールが届かないです。
試したこと
ポート番号を変えたり、SMTPサーバーを変更したりしてみましたが
そもそもステータスコードなどが表示されていないので正常に動いているのか?が不明です。
やりたいこと
ステータスコードやエラーコードなどを表示させて正常にメールを送信できるようにしたい。
変更後
C#
1using System; 2using System.Windows; 3using MailKit; 4namespace Mail_ck_Alpha_1._00 5{ 6 /// <summary> 7 /// MainWindow.xaml の相互作用ロジック 8 /// </summary> 9 10 public partial class MainWindow : Window 11 { 12 public MainWindow() 13 { 14 InitializeComponent(); 15 } 16 17 private void Button_Click(object sender, RoutedEventArgs e) 18 { 19 20 // MimeMessageを作り、宛先やタイトルなどを設定する 21 var message = new MimeKit.MimeMessage(); 22 message.From.Add(new MimeKit.MailboxAddress("MailKit ユーザー", "aaaa@xxxxxxxxxx")); 23 message.To.Add(new MimeKit.MailboxAddress("MailKit 試験", "xxxxxxxx@i.softbank.jp")); 24 // message.Cc.Add(……省略……); 25 // message.Bcc.Add(……省略……); 26 message.Subject = "MailKit でメールを送信するテスト"; 27 28 // 本文を作る 29 var textPart = new MimeKit.TextPart(MimeKit.Text.TextFormat.Plain); 30 textPart.Text = @"MailKit を使ってメールを送ってみるテストです。"; 31 32 // MimeMessageを完成させる 33 message.Body = textPart; 34 35 // SMTPサーバに接続してメールを送信する 36 using (var client = new MailKit.Net.Smtp.SmtpClient()) 37 { 38 39 // 開発用のSMTPサーバが暗号化に対応していないときは、次の行を追加する 40 //client.ServerCertificateValidationCallback = (s, c, h, e) => true; 41 42 43 try 44 { 45 client.Connect("sv8125.xserver.jp", 995); 46 TextBox01.Text = "接続完了\r\n"; 47 48 // SMTPサーバがユーザー認証を必要としない場合は、次の2行は不要 49 //client.AuthenticateAsync(userName, password); 50 TextBox01.AppendText("認証完了\r\n"); 51 52 client.(message); 53 TextBox01.AppendText("送信完了\r\n"); 54 55 client.DisconnectAsync(true); 56 TextBox01.AppendText("切断\r\n"); 57 } 58 catch (Exception ex) 59 { 60 TextBox01.AppendText(ex.ToString()); 61 } 62 } 63 64 } 65 } 66} 67 68コード
変更前
C#
1using System; 2using System.Windows; 3using MailKit; 4namespace Mail_ck_Alpha_1._00 5{ 6 /// <summary> 7 /// MainWindow.xaml の相互作用ロジック 8 /// </summary> 9 10 public partial class MainWindow : Window 11 { 12 public MainWindow() 13 { 14 InitializeComponent(); 15 } 16 17 private void Button_Click(object sender, RoutedEventArgs e) 18 { 19 20 // MimeMessageを作り、宛先やタイトルなどを設定する 21 var message = new MimeKit.MimeMessage(); 22 message.From.Add(new MimeKit.MailboxAddress("MailKit ユーザー", "mail_addres")); 23 message.To.Add(new MimeKit.MailboxAddress("MailKit 試験", "mail_addres")); 24 // message.Cc.Add(……省略……); 25 // message.Bcc.Add(……省略……); 26 message.Subject = "MailKit でメールを送信するテスト"; 27 28 // 本文を作る 29 var textPart = new MimeKit.TextPart(MimeKit.Text.TextFormat.Plain); 30 textPart.Text = @"MailKit を使ってメールを送ってみるテストです。"; 31 32 // MimeMessageを完成させる 33 message.Body = textPart; 34 35 // SMTPサーバに接続してメールを送信する 36 using (var client = new MailKit.Net.Smtp.SmtpClient()) 37 { 38 39 // 開発用のSMTPサーバが暗号化に対応していないときは、次の行を追加する 40 //client.ServerCertificateValidationCallback = (s, c, h, e) => true; 41 42 43 try 44 { 45 client.ConnectAsync("svxxxx.xserver.jp", 995); 46 TextBox01.Text = "接続完了\r\n"; 47 48 // SMTPサーバがユーザー認証を必要としない場合は、次の2行は不要 49 //client.AuthenticateAsync(userName, password); 50 TextBox01.AppendText("認証完了\r\n"); 51 52 client.SendAsync(message); 53 TextBox01.AppendText("送信完了\r\n"); 54 55 client.DisconnectAsync(true); 56 TextBox01.AppendText("切断\r\n"); 57 } 58 catch (Exception ex) 59 { 60 TextBox01.AppendText(ex.ToString()); 61 } 62 } 63 64 } 65 } 66} 67
WireShark などのキャプチャツールを使って、普通にメーラーなどを使って正常に送信できる場合と、アプリを使った場合を比較してみると解決のためのヒントが見つかると思います。
イベントハンドラ Button_Click の中で非同期メソッド(~Async)呼んでいて、その戻り値を破棄しています。
非同期について勉強するかAsync接尾語のつかない同期メソッドを呼んでください。
ご連絡ありがとうございます。
さっそくSendAsyncなどのメソッドをSendなどAsyncに変更してみましたが
ボタンを押しても動いているのか?解らない状態で
接続完了も認証完了も何も表示されない状態になってしまいました・・・・
送信は出来たのですか?
送信できたなら、接続完了も認証完了も表示されないのは正常です。
お世話になります
送られていませんでした。
送信完了などのステータスメッセージも出ていません
try~ catchの書き方がまずいです。
try~ catchを除いて実行してください。
あなたの回答
tips
プレビュー