使用SMTP发送带附件的邮件

3
protected void Button1_Click(object sender, EventArgs e)
{
    var fromAddress = new MailAddress(fromid.Text, fromname.Text);
    var toAddress = new MailAddress(toid.Text, toname.Text);
    string fromPassword = pswd.Text;
    string subject = subjectbox.Text;
     string body = bodybox.Text;
     Attachment at = new Attachment(Server.MapPath("~/Penguins.jpg"));

    var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
        Timeout = 20000,

    };
    using (var message = new MailMessage(fromAddress, toAddress)
    {
        Subject = subject,
        Body = body,
        IsBodyHtml = false,


    })
    {
        message.Attachments.Add(at);
        smtp.Send(message);
    }

}

没有错误,但发送邮件时需要一些时间并显示“连接超时”,无法发送邮件... :( 有人能告诉我问题出在哪里吗?


不发送附件它能正常工作吗? - Sleiman Jneidi
你好,你的问题似乎不在于附件本身,而是与 Gmail 服务器的连接有关,请查看这个 stackoverflow 问题。 - hjgraca
@sleiman jneidi 是的,它可以工作。邮件已发送。但是当我尝试添加附件时,它不起作用。而且也没有编译错误。 - Syed Yunus
抱歉再说一遍,请查看此链接(https://dev59.com/M3RB5IYBdhLWcg3wJkhC),它会有所帮助。 - hjgraca
请查看此链接 https://stackoverflow.com/questions/33665280/add-multiple-images-in-the-email-body-inlineusing-c-sharp-windows-application/49329461#49329461 - kumar chandraketu
3个回答

4
尝试使用以下代码解决您的带附件的SMTP邮件问题:
post.From = new MailAddress(From);
post.To.Add(To);
post.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
post.Subject = Subject;
post.Body = Body;

var htmlView = AlternateView.CreateAlternateViewFromString(post.Body, null, "text/html");
post.AlternateViews.Add(htmlView);

if (attachments != null && attachments.Count > 0)
{
    foreach (var at in attachments)
    {
        post.Attachments.Add(at1);
    }
}

post.IsBodyHtml = true;

//if you have relay privilege you can use only host data; 
//var host = "Your SMTP Server IP Adress";
//var postman = new SmtpClient(host);

//you dont have relay privilege you must be use Network Credential
var postman = new SmtpClient("Host Server Name", Port);
NetworkCredential cred = new NetworkCredential(mail adress, password);
postman.UseDefaultCredentials = false;
postman.Credentials = cred;
postman.Send(post);
post.Dispose();
return true;

0
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Net.Configuration;

 MailMessage message = new MailMessage(FromMailId, ToMaiId, "YourMessage");
 SmtpClient emailClient = new SmtpClient(mailsmtp.Trim());
 System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(FromMailId,                                          
 FromMailIdpwd);
 emailClient.UseDefaultCredentials = false;
 emailClient.Credentials = SMTPUserInfo;
  emailClient.Send(message);

0

我认为你的问题与Gmail SMTP服务器有关。尝试使用以下方法:

                MailMessage message = new MailMessage(new MailAddress(txtSenderMail.Text, txtSenderName.Text), new MailAddress(txtToAdd.Text);
                message.IsBodyHtml = true;
                message.Subject = txtSubject.Text;
                message.Body = txtMail.Text;
                message.Priority = MailPriority.High;
                SmtpClient smtp = new SmtpClient(YOUR SMTP ADDRESS, YOUR SMTP PORT);
                smtp.EnableSsl = false;
                smtp.UseDefaultCredentials = false; //you can use this line if you have your own SMTP server if not set it **True** (also you can get server address of your internet service company. like mine is: smtp.datak.ir  but it only works on your own computer not Web server. webservers could have SMTP too.) 
                smtp.Send(message);

我刚刚尝试了你的代码,邮件已经发送到我的邮箱了,但是代码出现了消息发送失败的异常。我建议再尝试另一个没有凭据的SMTP服务器。 - aliCna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接