Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blazor C#发送电子邮件_C#_Blazor - Fatal编程技术网

Blazor C#发送电子邮件

Blazor C#发送电子邮件,c#,blazor,C#,Blazor,我的Blazor项目中有一个razor组件,当用户单击按钮时,它将触发电子邮件 OnClick功能电子邮件将通过以下代码发送电子邮件 async Task Email(string originalpiv, string docno, string cuscode, string cusname, string docdate) { CModule.SendMail("example@gmail.com", "example@gmail.com", "", "HI", "HI BRO")

我的Blazor项目中有一个razor组件,当用户单击按钮时,它将触发电子邮件

OnClick功能电子邮件将通过以下代码发送电子邮件

async Task Email(string originalpiv, string docno, string cuscode, string cusname, string docdate)
{
   CModule.SendMail("example@gmail.com", "example@gmail.com", "", "HI", "HI BRO");

}
public static bool SendMail(string from, string to, string cc, string subject, string body)
        {
            bool rst = false;
            MailMessage Msg = new MailMessage();
            try
            {
                SmtpClient smtp = new SmtpClient("mail.gmail.com", 587);
                string[] toeml = to.Split(new Char[] { ';', ',' });
                foreach (string tmp in toeml)
                {
                    if (tmp.Trim() != "") Msg.To.Add(tmp.Trim());
                }
                string[] cceml = cc.Split(new Char[] { ';', ',' });
                foreach (string tmp in cceml)
                {
                    if (tmp.Trim() != "") Msg.CC.Add(tmp.Trim());
                }
                Msg.From = new MailAddress(from.Trim());
                Msg.Subject = subject;
                Msg.Body = body;
                Msg.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
                smtp.Credentials = new System.Net.NetworkCredential("nick.chau@gmail.com", "880215");
                smtp.Send(Msg);
                rst = true;
            }
            catch (Exception ex)
            {

            }
            finally
            {
                Msg.Dispose();
            }
            return rst;
        }
CModule.SendMail是一种方法,在该方法中,将在代码下方传递来自、收件人、主体的电子邮件

async Task Email(string originalpiv, string docno, string cuscode, string cusname, string docdate)
{
   CModule.SendMail("example@gmail.com", "example@gmail.com", "", "HI", "HI BRO");

}
public static bool SendMail(string from, string to, string cc, string subject, string body)
        {
            bool rst = false;
            MailMessage Msg = new MailMessage();
            try
            {
                SmtpClient smtp = new SmtpClient("mail.gmail.com", 587);
                string[] toeml = to.Split(new Char[] { ';', ',' });
                foreach (string tmp in toeml)
                {
                    if (tmp.Trim() != "") Msg.To.Add(tmp.Trim());
                }
                string[] cceml = cc.Split(new Char[] { ';', ',' });
                foreach (string tmp in cceml)
                {
                    if (tmp.Trim() != "") Msg.CC.Add(tmp.Trim());
                }
                Msg.From = new MailAddress(from.Trim());
                Msg.Subject = subject;
                Msg.Body = body;
                Msg.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
                smtp.Credentials = new System.Net.NetworkCredential("nick.chau@gmail.com", "880215");
                smtp.Send(Msg);
                rst = true;
            }
            catch (Exception ex)
            {

            }
            finally
            {
                Msg.Dispose();
            }
            return rst;
        }

这些是我尝试过的代码,但是电子邮件没有发送出去,不知道为什么,有什么想法吗?

您是否将电子邮件类作为服务添加到
startup.cs
中用作依赖项注入

这对我很有用:

  • 创建将通过appsettings.json配置的电子邮件设置
  • 创建邮件接口
  • 创建邮件服务类
  • 在Startup.cs中添加:
  • services.AddSingleton(Configuration.GetSection(“MailSettings”).Get());
    services.addScope();
    
  • 在appsettings.json中,在“MailSettings”下添加邮件配置
  • 在要使用它的razor组件中,只需调用依赖项注入。使用
    @inject ReservationBookingSystem.Services.IMailService MailService
    。在代码内调用
    wait MailService.sendmailasync(“to”)。email@mail.com“,”测试“;

  • 这在blazor服务器中起作用。因此,基本上对你来说,用
    CModule
    替换
    MailSettings
    ,你就可以使用客户端或服务器端blazor了?Defone不知道为什么-我的意思是,吞下一个异常,然后抱怨你没有任何信息就像不聪明一样,你知道。你有异常吗?哪一个?冒泡出来。一个d为什么你要在finally中处理msg而不是使用…using?@Thomas:Works perfect.Thx用于这个广泛的Answare。在SendEmail中使用using()不是一个好主意吗?
    using ReservationBookingSystem.Model;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Mail;
    
    namespace ReservationBookingSystem.Services
    {
        public class MailService : IMailService
        {
            private readonly MailSettings _mailConfig;
            public MailService(MailSettings mailConfig)
            {
                _mailConfig = mailConfig;
            }
    
            public async Task SendEmailAsync(string ToEmail, string Subject, string HTMLBody)
            {
                MailMessage message = new MailMessage();
                SmtpClient smtp = new SmtpClient();
                message.From = new MailAddress(_mailConfig.FromEmail);
                message.To.Add(new MailAddress(ToEmail));
                message.Subject = Subject;
                message.IsBodyHtml = true;
                message.Body = HTMLBody;
                smtp.Port = _mailConfig.Port;
                smtp.Host = _mailConfig.Host;
                smtp.EnableSsl = true;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new NetworkCredential(_mailConfig.Username, _mailConfig.Password);
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                await smtp.SendMailAsync(message);
            }
        }
    }
    
    
    services.AddSingleton(Configuration.GetSection("MailSettings").Get<MailSettings>());
    services.AddScoped<IMailService, MailService>();