首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp.Net -标识2-在EmailService触发的电子邮件中附加文件

Asp.Net -标识2-在EmailService触发的电子邮件中附加文件
EN

Stack Overflow用户
提问于 2014-08-21 13:45:54
回答 1查看 2.5K关注 0票数 1

我正在使用Asp.Net-Identity-2来管理我的应用程序中的用户访问。

我正在使用EmailService (UserManager.SendEmail)发送确认电子邮件消息,我想发送格式化的HTML消息,我希望在其中附加图片。

我该怎么做??

  • 安装标识用户管理器EmailService 公共类AppUserManager : UserManager { public AppUserManager(IUserStore store):base(IUserStore){} public静态AppUserManager Create(IdentityFactoryOptions options,IOwinContext context) { AppUserManager manager = new AppUserManager(新UserStore(db));//此处的一些设置代码.//Hook到我的EmailService (参见类MyEmailService.cs) manager.EmailService =新的MyEmailService();返回管理器;} //Create } //class
  • MyEmailService 公共类MyEmailService : IIdentityMessageService {公共任务SendAsync(IdentityMessage message) { MailMessage email =新MailMessage("me@sample.com",message.Destination);email.Subject = message.Subject;email.Body = message.Body;email.IsBodyHtml = true;var mailClient = new SmtpClient();mailClient.Host = "EmailServer";mailClient.Host= 25;返回email.IsBodyHtml(电子邮件);}/SendAsync} //class
  • 操作发送电子邮件 公共UserManager.GenerateEmailConfirmationToken(user.Id);ActionResult ForgotPassword(string email) { if (ModelState.IsValid) { AppUser user = UserManager.FindByEmail(email);if (user == null UserManager.IsEmailConfirmed!(UserManager.IsEmailConfirmed(user.Id){返回视图(“./Home/Index”);}/if字符串代码=UserManager.FindByEmailstring callbackUrl = Url.Action("ResetPassword","Admin",新的{ Id = user.Id,code = code },protocol: Request.Url.Scheme);string strMessage = getHTMLMessage();//变量Html消息,其中包含图像引用(ex )。"")UserManager.SendEmail(user.Id,"Message“,strMessage);return (”../Home/Index“);} //如果到目前为止,有什么东西失败了,请重新显示返回视图();}//忘记密码

我怀疑如何在信息中附加图像..。

谢谢你的帮助..。

胡利奥·舒特

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 14:25:38

我必须在我的服务中创建另一个方法并直接调用它。

代码语言:javascript
复制
    public Task SendAsync(IdentityMessage message, IEnumerable<KeyValuePair<string, Stream>> attach)
    {
        var myMessage = new SendGridMessage() { From = new MailAddress("my@email.com") };
        myMessage.AddTo(message.Destination);
        myMessage.Subject = message.Subject;

        myMessage.Html = message.Body;
        myMessage.Text = message.Body;


        var credentials = new NetworkCredential("myuser", "mypassword");
        var transportWeb = new Web(credentials);

        foreach (var file in attach)
        {
            myMessage.AddAttachment(file.Value,file.Key);
        }

        return transportWeb.DeliverAsync(myMessage);
    }

编辑:(2015-08-14)

最后一班:

代码语言:javascript
复制
public class EmailService : IIdentityMessageService
{
    const string from = "mail@domain.com";
    const string username = "username";//Environment.GetEnvironmentVariable("SENDGRID_USER");
    const string pswd = "password";//Environment.GetEnvironmentVariable("SENDGRID_PASS");
    private List<KeyValuePair<string, Stream>> _attachments;
    private List<KeyValuePair<string, string>> _recipients;

    public Task SendAsync(IdentityMessage message)
    {
        var myMessage = new SendGridMessage() { From = new MailAddress(from) };
        var credentials = new NetworkCredential(username, pswd);
        var transportWeb = new Web(credentials);

        myMessage.AddTo(message.Destination);
        if (_recipients != null)
        {
            _recipients.ForEach(r => myMessage.AddTo(string.Format("{0} {1}", r.Key, r.Value)));
        }
        myMessage.Subject = message.Subject;
        myMessage.Html = message.Body;
        myMessage.Text = message.Body;

        if (_attachments != null)
        {
            foreach (var attachment in _attachments)
            {
                myMessage.AddAttachment(attachment.Value, attachment.Key);
            }
        }

        return transportWeb.DeliverAsync(myMessage);
    }

    public Task SendAsync(IdentityMessage message, IEnumerable<KeyValuePair<string, Stream>> attachments)
    {
        var myMessage = new SendGridMessage() { From = new MailAddress(from) };
        var credentials = new NetworkCredential(username, pswd);
        var transportWeb = new Web(credentials);

        myMessage.AddTo(message.Destination);
        myMessage.Subject = message.Subject;
        myMessage.Html = message.Body;
        myMessage.Text = message.Body;

        foreach (var attachment in attachments)
        {
            myMessage.AddAttachment(attachment.Value, attachment.Key);
        }

        return transportWeb.DeliverAsync(myMessage);
    }

    public Task SendAsync(IdentityMessage message, KeyValuePair<string, Stream> attachment)
    {
        var myMessage = new SendGridMessage() { From = new MailAddress(from) };
        var credentials = new NetworkCredential(username, pswd);
        var transportWeb = new Web(credentials);

        myMessage.AddTo(message.Destination);
        myMessage.Subject = message.Subject;
        myMessage.Html = message.Body;
        myMessage.Text = message.Body;
        myMessage.AddAttachment(attachment.Value, attachment.Key);

        return transportWeb.DeliverAsync(myMessage);
    }

    public void AddTo(string name,string mail)
    {
        _recipients = _recipients ?? new List<KeyValuePair<string, string>>();
        _recipients.Add(new KeyValuePair<string, string>(name, string.Format("<{0}>", mail)));
    }

    public void AddAttachment(string name, Stream file)
    {
        _attachments = _attachments ?? new List<KeyValuePair<string, Stream>>();
        _attachments.Add(new KeyValuePair<string, Stream>(name, file));
    }

    public void AddAttachment<T>(string name, T records)
    {
        var jsonSerialiser = new JavaScriptSerializer();
        var json = jsonSerialiser.Serialize(records);
        var bytes = Encoding.UTF8.GetBytes(json);
        var ms = new MemoryStream(bytes);
        ms.Flush();
        ms.Seek(0, SeekOrigin.Begin);


        _attachments = _attachments ?? new List<KeyValuePair<string, Stream>>();
        _attachments.Add(new KeyValuePair<string, Stream>(name, ms));
    }
}

那就可以用它..。

代码语言:javascript
复制
// use it directly
                var emailService = new EmailService();
                IdentityMessage msg = new IdentityMessage()
                {
                    Destination = "test <test@domain.com>",
                    Subject = "Subject",
                    Body = "Body"
                };

                emailService.AddTo("Name1", "mail1@domain.com");
                emailService.AddTo("Name2", "mail2@domain.com");
                emailService.AddTo("Name3", "mail3@domaincom");

                emailService.AddAttachment(filename", stream);
                await emailService.SendAsync(msg);

                // Or use it from UserManager
                (UserManager.EmailService as EmailService).AddAttachment("name", yourStream);
                await UserManager.SendEmailAsync("userid", "subject", "body");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25428005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档