C# 当我关闭应用程序时,电子邮件已成功发送
我正在发送一封包含一些附件和一些基本信息的电子邮件。所以每件事都在发送 完美地但当我检查我的收件箱邮件还没有到那里时, 所以我试着关闭我的申请表。所以那个时候邮件来了 太累了很多时间,我发现当我发送邮件并关闭整个表单时,收件人邮箱会收到邮件。有什么想法吗 代码段:C# 当我关闭应用程序时,电子邮件已成功发送,c#,visual-studio-2010,visual-studio,email,sendmail,C#,Visual Studio 2010,Visual Studio,Email,Sendmail,我正在发送一封包含一些附件和一些基本信息的电子邮件。所以每件事都在发送 完美地但当我检查我的收件箱邮件还没有到那里时, 所以我试着关闭我的申请表。所以那个时候邮件来了 太累了很多时间,我发现当我发送邮件并关闭整个表单时,收件人邮箱会收到邮件。有什么想法吗 代码段: SmtpClient smtp = new SmtpClient(smtpserver, 25); MailMessage msg = new MailMessage(); msg
SmtpClient smtp = new SmtpClient(smtpserver, 25);
MailMessage msg = new MailMessage();
msg.From = new MailAddress(email_From);
msg.To.Add(email_Recipient);
msg.IsBodyHtml = true;
msg.Subject = email_Subject;
///Attachment's and Body
try
{
_f3.ShowDialog();
smtp.Send(msg);
MessageBox.Show("Email Successfully Sent!!!", "Mail!!!.");
Environment.Exit(0);// -->> if i keep this mail is going.. else i have to close
// my application to receive mail
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
尝试重新排列代码:
smtp.Send(msg);
_f3.ShowDialog();
将发送电子邮件的行置于显示模式对话框的行上方。在关闭此表单之前,您的代码不会继续。正如@TyCobb指出的,.NET 4+中的
SmtpClient
实现了IDisposable
。你不调用smtp.Dispose()
就是在破坏它的合同。使用块通常是最方便的方法。因此,有很多方法可以发送电子邮件。Using语句是一种非常流行的语句
以下是发送邮件的另一种方法的链接:
我想问你一个问题,你想做什么
这是一个大型电子邮件发送者吗?
您可能需要使用邮件发送服务,例如sendgrid
如果这是一个为你自己的测试项目,它将发送低优先级的管理电子邮件或其他东西,你可能会对上述内容感到满意
无论如何,我会有一个类设置,您可以在其中传入以下内容:To、From、Subject、HTMLMessageContent、PlainTextMessageContent,至少
然后,此方法将处理从应用程序发送的所有电子邮件。以下是一个很好的起点
public bool SendMail(string from, string to, string subject, string htmlContent, string plainContent)
{
//Email sending code - could be replaced by 3rd party mail sending API, etc.
MailMessage mail = new MailMessage(from, to);
SmtpClient client = new SmtpClient();
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp.google.com";
mail.Subject = subject;
mail.Body = htmlContent;
client.Send(mail);
}
然后,您可以通过
//... code
SendMail(email_From, email_Recipient, email_Subject, email_body_HTML, email_body, plaintext);
//... code
显然,您可以执行一些操作,例如返回一个表示成功的bool、错误处理/捕获/记录、附件等
试试看这是否是一个好的起点
或者,以下链接也应该有一些用处:
尝试使用“使用块”,也可以使用Show()代替ShowDialog()
我以前有过这个问题。如果我没记错的话,我必须在完成时处理
SmtpClient
。您的目标是.NET的哪个版本?(VS2010中的C#编译器支持多目标)请参阅@BenVoigt我尝试过这也不起作用<代码>使用(smtp作为IDisposable){smtp.Send(msg);}理论。。。由于您的评论使它看起来像是附加文件,请确保您处理了所有可能的内容。很可能是由于某些东西使文件处于锁定状态,消息在释放之前无法发送——因此,在应用程序关闭后,它会发送消息。处置!:D错误System.Net.Mail.SmtpClient'不包含'Dispose'的定义,并且找不到接受'System.Net.Mail.SmtpClient'类型的第一个参数的扩展方法'Dispose'。(是否缺少using指令或程序集引用?
@StacyKebler:。并解释了调用Dispose的重要性。如果它不像MSDN所说的那样公开,那么请尝试((IDisposable)smtp).Dispose()
。或者像我说的那样,使用。无法将类型为“system.net.mail.smptclient”的对象强制转换为类型为“system.idisposable”
@StacyKebler正如Ben在问题评论中所问的那样,您运行的是什么版本的.netSmtpClient
直到4.0才实现IDisposable
MailMessage
在2.0中实现了IDisposable
,但我怀疑调用它是否能解决您的问题。这是一件值得尝试的事情,我也尝试过同样的效果。。直到我关闭应用程序Error'System.Net.mail.SmtpClient':当我使用using(SmtpClient smtp=new SmtpClient(smtpserver,25))
时,using语句中使用的类型必须隐式转换为'System.IDisposable'
,不要使用using块,因为SmtpClient无法识别。圣母玛利亚!!我进入了项目属性->应用程序选项卡。并将框架从2.0版更改为4.0版。。noe mysmtp.Dispose()代码>工作正常。。我的意思是当我改变框架时。。这会影响我的申请吗。。因为我需要这个应用程序在windows XP professional OSalso上运行,所以我想指出,这个应用程序运行在服务器中的两台不同的计算机上。那么有什么问题吗。我可以看到另一个名为.netframework4clientprofile
的框架。。我需要选择那个吗。。如果我在网络域上运行此应用程序。。
using(SmtpClient smtp = new SmtpClient(smtpserver, 25))
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress(email_From);
msg.To.Add(email_Recipient);
msg.IsBodyHtml = true;
msg.Subject = email_Subject;
///Attachment's and Body
try
{
_f3.ShowDialog(); //until you dont close the dialog, it will not send the msg. Maybe _f3.Show() solve your problem
smtp.Send(msg);
MessageBox.Show("Email Successfully Sent!!!", "Mail!!!.");
//Environment.Exit(0);// -->> if i keep this mail is going.. else i have to close
// my application to receive mail
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}