(SendAsyncを利用して送信することで非同期送信が可能になります。)
VB.NET
Dim sc As System.Net.Mail.SmtpClient = Nothing
Private Sub btn1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles btn1.Click
btn1.Enabled = False
btn2.Enabled = True
Dim msg As New System.Net.Mail.MailMessage( _
"sender@xxx.xxx", "recipient@xxx.xxx", "題名", "本文")
If sc Is Nothing Then
sc = New System.Net.Mail.SmtpClient()
AddHandler sc.SendCompleted, AddressOf sc_SendCompleted
End If
sc.Host = "localhost"
sc.Port = 25
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
sc.SendAsync(msg, msg)
End Sub
Private Sub btn2_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles btn2.Click
If Not (sc Is Nothing) Then
sc.SendAsyncCancel()
End If
End Sub
Private Sub sc_SendCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Dim msg As System.Net.Mail.MailMessage = _
CType(e.UserState, System.Net.Mail.MailMessage)
If e.Cancelled Then
Console.WriteLine("[{0}]の送信はキャンセルされました。", msg.Subject)
Else
If Not (e.Error Is Nothing) Then
Console.WriteLine("[{0}]の送信でエラーが発生しました。", msg.Subject)
Console.WriteLine(e.Error.Message)
Else
Console.WriteLine("[{0}]の送信が完了しました。", msg.Subject)
End If
End If
msg.Dispose()
btn1.Enabled = True
btn2.Enabled = False
End Sub
C#System.Net.Mail.SmtpClient sc = null;
private void btn1_Click(object sender, EventArgs e)
{
btn1.Enabled = false;
btn2.Enabled = true;
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(
"sender@xxx.xxx", "recipient@xxx.xxx", "題名", "本文");
if (sc == null)
{
sc = new System.Net.Mail.SmtpClient();
sc.SendCompleted +=
new System.Net.Mail.SendCompletedEventHandler(sc_SendCompleted);
}
sc.Host = "localhost";
sc.Port = 25;
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
sc.SendAsync(msg, msg);
}
private void btn2_Click(object sender, EventArgs e)
{
if (sc != null)
sc.SendAsyncCancel();
}
private void sc_SendCompleted(object sender,
System.ComponentModel.AsyncCompletedEventArgs e)
{
System.Net.Mail.MailMessage msg = (System.Net.Mail.MailMessage)e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}]の送信はキャンセルされました。", msg.Subject);
}
else if (e.Error != null)
{
Console.WriteLine("[{0}]の送信でエラーが発生しました。", msg.Subject);
Console.WriteLine(e.Error.Message);
}
else
{
Console.WriteLine("[{0}]の送信が完了しました。", msg.Subject);
}
msg.Dispose();
btn1.Enabled = true;
btn2.Enabled = false;
}