It is possible to do this as shown in documentation. Out of this we’d better get a more complete library. Constant example there:
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async {
public class SimpleAsynchronousExample {
static bool mailSent = false;
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e) {
// Get the unique identifier for this asynchronous operation.
String token = (string) e.UserState;
if (e.Cancelled) {
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null) {
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
} else {
Console.WriteLine("Message sent.");
}
mailSent = true;
}
public static void Main(string[] args) {
// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient(args[0]);
// Specify the e-mail sender.
// Create a mailing address that includes a UTF8 character
// in the display name.
MailAddress from = new MailAddress("[email protected]",
"Jane " + (char)0xD8+ " Clayton",
System.Text.Encoding.UTF8);
// Set destinations for the e-mail message.
MailAddress to = new MailAddress("[email protected]");
// Specify the message content.
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test e-mail message sent by an application. ";
// Include some non-ASCII characters in body and subject.
string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
message.Body += Environment.NewLine + someArrows;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "test message 1" + someArrows;
message.SubjectEncoding = System.Text.Encoding.UTF8;
// Set the method that is called back when the send operation ends.
client.SendCompleted += new
SendCompletedEventHandler(SendCompletedCallback);
// The userState can be any object that allows your callback
// method to identify this send operation.
// For this example, the userToken is a string constant.
string userState = "test message1";
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
// If the user canceled the send, and mail hasn't been sent yet,
// then cancel the pending operation.
if (answer.StartsWith("c") && mailSent == false) {
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
Console.WriteLine("Goodbye.");
}
}
}
I put in the Github for future reference.
I’m finding it a little wide, I’d need to see how you’re doing. But basically you have to create an event on the button that triggers a method that cancels. Obviously it could not have a method "linguição" that makes the sending, or even could but then at each pass in the loop would have to check if the button was triggered, which probably workshop one flag.
– Maniero
But for example, what if it’s just sending one email? smtp.Send(mail) to send the email actually for taking a while, and if I want to cancel this submission?
– Bruno Silva
Did the answer solve your question? Do you think you can accept it? See [tour] if you don’t know how you do it. This would help a lot to indicate that the solution was useful to you. You can also vote on any question or answer you find useful on the entire site.
– Maniero