我关闭申请时电子邮件成功发送

时间:2014-10-03 15:19:26

标签: c# visual-studio-2010 visual-studio email sendmail

我发送的电子邮件包含一些附件和一些基本信息。所以每件事都在发送 完美。但是,当我检查我的收件箱邮件还没有, 所以我试着关闭我的申请表。那时邮件来了。

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

代码段:

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

4 个答案:

答案 0 :(得分:2)

因此,有很多方法可以发送电子邮件。而使用声明非常受欢迎。

以下是另一种发送邮件的方法的链接: Send e-mail via SMTP using C#

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

这是一个大规模的电子邮件发件人吗? 您可能希望使用邮件发送服务,例如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 Sending email in .NET through Gmail

答案 1 :(得分:1)

尝试重新激活您的代码:

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

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

答案 2 :(得分:1)

正如@TyCobb所指出的,.NET 4+中的SmtpClient实现了IDisposable。你没有打电话给smtp.Dispose()就打破了合同。 using块通常是实现这一目标的最便捷方式。

答案 3 :(得分:1)

尝试使用"使用块"也许是,Show()insted 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);
        }
    }   
}