当我关闭应用程序时,电子邮件发送成功

本文关键字:电子邮件 成功 应用程序 | 更新日期: 2023-09-27 18:25:38

我正在发送一封包含一些附件和一些基本信息的电子邮件。所以每件事都在发送完美地但当我查看收件箱中尚未收到的邮件时,所以我试着关闭我的申请表。所以时间邮件来了。

太累了很多时间,我发现当我发送邮件并关闭整个表单时,收件人邮箱中就会收到电子邮件任何想法!!!

代码片段:

 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);
            }
        }   

当我关闭应用程序时,电子邮件发送成功

@TyCobb指出,.NET 4+中的SmtpClient实现了IDisposable。你不给smtp.Dispose()打电话是违反合同的。using块通常是实现这一点的最方便的方式。

因此,有很多发送电子邮件的方法。Using语句是一个非常流行的语句。

以下是另一种发送邮件方法的链接:使用C#通过SMTP发送电子邮件

我想你的一个问题是,你想做什么?

这是一个大型电子邮件发件人吗?您可能想要使用邮件调度服务,例如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,错误处理/捕获/日志记录,附件等等。

试试看这是否是一个好的起点。

或者,以下链接也应该有一些用处:http://csharp.net-informations.com/communications/csharp-smtp-mail.htm通过Gmail 在.NET中发送电子邮件

尝试重新排列代码:

 smtp.Send(msg);
_f3.ShowDialog();

将发送电子邮件的行放在显示模式对话框的行的上方。在关闭此表单之前,您的代码不会继续。

尝试使用"使用块",也许也可以使用ShowDialog()代替ShowDialog

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);
        }
    }   
}