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 &lt;xxxx.yyy@gmail.com&gt;" 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(“发件人邮件”)