如何从 C# 发送带有附件的电子邮件?

问题描述 投票:0回答:2

我正在尝试编写一个代码,什么可以保存图片框的内容(有效)并通过电子邮件发送(不起作用)。

您认为问题可能出在哪里?是否还有其他内容 SmtpClient client = new SmtpClient("smtp.gmail.com"); ?

此外,在上传图像时程序不应冻结,而是在必要时能够同时上传一些图像。

            System.Drawing.Image img = pictureBox1.Image;
            string name = "" + DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss") + ".jpg";
            img.Save(name, System.Drawing.Imaging.ImageFormat.Jpeg);

            if (chb_notif.Checked == true) ////////////// SEND EMAIL!
            {

                MailMessage message = new MailMessage(
                   "[email protected]",
                   tb_email.Text ,
                   "VIDEO FENCE",
                   "Your perimeter has been breeched! System name: " + Environment.MachineName + "." );

                Attachment data = new Attachment(name);

                ContentDisposition disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(name);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(name);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(name);

                message.Attachments.Add(data);

                //Send the message.
                SmtpClient client = new SmtpClient("smtp.gmail.com");

                client.Credentials = CredentialCache.DefaultNetworkCredentials;

                client.Send(message);
            }

谢谢!

c# .net smtpclient
2个回答
1
投票

对于:

“SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.5.1 需要身份验证”

尝试使用:

 var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("username", "password"),
            EnableSsl =true
        };

        client.Send(message);

1
投票

如果您不希望应用程序挂起,而这可能需要一些时间(如果图像很大,或者服务器没有响应,您需要将其放入单独的线程中。(已经存在许多示例)

正如我们中的一些人也指出的那样,您还需要发送电子邮件,上面的代码并没有这样做。当然请注意,如果 gmail 认为您正在尝试通过它们进行中继,则邮件可能不会发送。

© www.soinside.com 2019 - 2024. All rights reserved.