我正在使用Asp.Net-Identity-2来管理我的应用程序中的用户访问。
我正在使用EmailService (UserManager.SendEmail)发送确认电子邮件消息,我想发送格式化的HTML消息,我希望在其中附加图片。
我该怎么做??
我怀疑如何在信息中附加图像..。
谢谢你的帮助..。
胡利奥·舒特
发布于 2015-07-24 14:25:38
我必须在我的服务中创建另一个方法并直接调用它。
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)
最后一班:
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));
}
}那就可以用它..。
// 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");https://stackoverflow.com/questions/25428005
复制相似问题