电子邮件发件人冻结

本文关键字:冻结 电子邮件 | 更新日期: 2023-09-27 17:57:50

我制作了一个应用程序,可以压缩一些文件并通过电子邮件发送。大约有70个文件(它们的总大小约为800kb)。

zip过程冻结了我的应用程序(但还好,因为它大约需要一秒钟)

问题出在电子邮件流程上。在调试过程中,我发现除了之外,整个电子邮件准备过程都很快

smtp.发送(消息)

这完全冻结了我的应用程序:5秒钟后,应用程序仍在运行,但从任务栏中消失,即使在发送了电子邮件后,该应用程序仍然没有响应。

发送电子邮件功能:

    public void SendMail(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
    {
        var fromAddress = new MailAddress(FromGmailEmail, "None");
        var toAddress = new MailAddress(ToEmail, "None");
        string fromPassword = GmailPassword;
        string subject = Subject;
        string body = Body;
        var smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };
        var message = new MailMessage(fromAddress, toAddress);
        message.Subject = subject;
        message.Body = body;
        try
        {
            for (int i = 0; i < AttachmentsPaths.Length; i++)
                message.Attachments.Add(new Attachment(AttachmentsPaths[i]));
        }
        catch (FileNotFoundException)
        {
        }
        smtp.Timeout = int.MaxValue;
        smtp.Send(message);
    }

我在发送电子邮件时打开了一个新线程。

public void OpenEmailThread(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
    {
        Thread thread = new Thread(() => SendMail(FromGmailEmail, GmailPassword, ToEmail, Subject, Body, AttachmentsPaths));
        thread.Name = "EmailThread";
        thread.Start();
    }

旁注:对于一些输出告诉我:

mscorlib.dll 中首次出现"System.IO.IOException"类型的异常

在上

smtp.发送(消息)

(但这是我最小的问题)

编辑:原来他发送文件时我正在编辑文件。我知道这会发生,这就是为什么我在发送电子邮件时添加了一个名为"IsEmaging"的bool变量来锁定文件。事实证明,在"smtp.Send(message);"之后,文件仍在上传。

解决方案:在发送前对附件进行压缩,仅在发送前进行压缩。这样,zip只会出现一次,因此不能修改.zip文件

电子邮件发件人冻结

我用它在一个新线程上发送邮件,它工作正常…

        public void SendEmail(string from, string to, string subject, string body, string attachPath)
    {
        Thread threadSendMails;
        threadSendMails = new Thread(delegate()
        {
            sendEmail(from, to, subject, body, attachPath);
        });
        threadSendMails.IsBackground = true;
        threadSendMails.Start();
    }

其中sendMail是我自己的邮件功能。