C# 向用户发送邮件-SmtpException导致问题
当我试图向客户发送电子邮件时,很抱歉向他们发送电子邮件 我已经看过了: 错误在这里:C# 向用户发送邮件-SmtpException导致问题,c#,sendgrid,C#,Sendgrid,当我试图向客户发送电子邮件时,很抱歉向他们发送电子邮件 我已经看过了: 错误在这里: client.Send(mail); 我构建代码的方式如下: string title = nameString; var viewModel = new EmailModel { getUrl = m.RemoveLinkUrl(), Title = title, FullName = item.Navn, text = text.ToHtmlString() }; va
client.Send(mail);
我构建代码的方式如下:
string title = nameString;
var viewModel = new EmailModel
{
getUrl = m.RemoveLinkUrl(),
Title = title,
FullName = item.Navn,
text = text.ToHtmlString()
};
var resultMail = await _viewRenderService.RenderToStringAsync("~/Views/Templates/newMail.cshtml", viewModel);
MailMessage mail = new MailMessage(m.mailFrom(), item.Brugernavn);
SmtpClient client = new SmtpClient
{
Port = m.port(),
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Host = m.host()
};
mail.Subject = title;
mail.Body = Regex.Replace(resultMail, "<[^>]*>", "");
client.Send(mail);<--- Error here
string title=nameString;
var viewModel=新的电子邮件模型
{
getUrl=m.RemoveLinkUrl(),
头衔,
FullName=item.Navn,
text=text.ToHtmlString()
};
var resultMail=wait _viewRenderService.RenderToStringAsync(“~/Views/Templates/newMail.cshtml”,viewModel);
MailMessage mail=新的MailMessage(m.mailFrom(),item.Brugernavn);
SmtpClient=新SmtpClient
{
端口=m.端口(),
DeliveryMethod=SmtpDeliveryMethod.Network,
UseDefaultCredentials=false,
Host=m.Host()
};
mail.Subject=标题;
mail.Body=Regex.Replace(结果邮件,]*>,“”);
客户端。发送(邮件) 您的代码为“ok”-表示匿名发送,但您尝试发送的电子邮件服务器也希望您添加“发送”凭据
通常情况下,您会将SmtpClient配置保存在应用程序的.config文件中,并且仅在代码中这样做
SmtpClient client = new SmtpClient();
上面的一行将从应用程序配置文件中读取配置-在用户配置下完全提供配置。也让他可以选择输入SMTP凭据
以下是通过Gmail发送的示例:
<configuration>
<system.net>
<mailSettings>
<smtp from="Mail Displayname <xxxx.yyy@gmail.com>" deliveryMethod="Network">
<network host="smtp.gmail.com" enableSsl="true" port="587" password="password" userName="xxxx.yyy@gmail.com"></network>
</smtp>
</mailSettings>
</system.net>
</configuration>
我设计了一个处理电子邮件的组件
首先将我的类添加到您的项目中
using System.ComponentModel;
using System.Net.Mail;
using System.Net;
using System.ComponentModel.DataAnnotations;
namespace Hector.Framework.Controls
{
public class MailMessageControl : Component
{
private MailMessage Mail = new MailMessage();
private SmtpClient SmtpClient = new SmtpClient();
public MailMessageControl()
{
Host = "smtp.gmail.com";
Port = 587;
EnableSSL = true;
}
public string Host
{
get => SmtpClient.Host;
set => SmtpClient.Host = value;
}
public int Port
{
get => SmtpClient.Port;
set => SmtpClient.Port = value;
}
public bool EnableSSL
{
get => SmtpClient.EnableSsl;
set => SmtpClient.EnableSsl = value;
}
public void AttachFile(string path)
{
Mail.Attachments.Add(new Attachment(path));
}
public void SetCredentials(string mail, string password)
{
SmtpClient.Credentials = new NetworkCredential(mail, password);
}
public void SetSender(string mail)
{
Mail.From = new MailAddress(mail);
}
public void AddAddressSee(string mail)
{
Mail.To.Add(mail);
}
public void SetSubject(string subject)
{
Mail.Subject = subject;
}
public void SetBody(string body, bool isHTML)
{
Mail.IsBodyHtml = isHTML;
Mail.Body = body;
}
public bool SendEmail()
{
try
{
SmtpClient.Send(Mail);
return true;
}
catch
{
return false;
}
}
public bool IsValidEmail(string email)
{
try
{
return new MailAddress(email).Address == email;
}
catch
{
return false;
}
}
public bool EmailIsValidated(string email)
{
return new EmailAddressAttribute().IsValid(email);
}
}
}
用法示例:
Hector.Framework.Controls.MailMessageControl mail = new Hector.Framework.Controls.MailMessageControl();
mail.SetCredentials("Your gmail email", "Your gmail password");
mail.SetSender("Sender mail");
mail.AttachFile("Your file path"); //If you want send file
mail.AddAddressSee("Add mail to receive your message");
mail.SetSubject("Subject");
mail.SetBody("Body", false);
if(mail.SendEmail())
{
//Mail send correctly
}
else
{
//Error
}
现在转到以下链接:
并启用此开关:
这允许您的程序使用您的凭据发送电子邮件,如果您不激活它,可能会导致错误
激活后,尝试发送消息是否设置了客户端。凭据=新系统.Net.NetworkCredential(“user@domain.com“,”密码“);在代码中或.config中的其他地方?消息非常清楚,您没有向smtp服务器传递凭据…这会导致以下错误:mail.SetSender(“发件人邮件”)代码>