因此,我试图通过中继smtp发送带有html正文,主题和可选附件的电子邮件。发送工作无一例外,但是,发送的邮件最终以空主题结尾,没有附件,该附件应从与我的API和控制台应用程序托管在同一域中的Web应用程序的wwwroot文件夹中获取文件。该控制台应用将从任务计划程序中调用。该程序将我的API作为依赖项,因此它可以调用ProcessQueue
任务。这是从我的控制台应用程序正确调用的。为了获取电子邮件的数据,代码将从MailQueue表检索数据,然后像这样填充邮件消息:
public async Task ProcessQueue(int range,bool send)
{
SmtpClient client = new SmtpClient
{
Host = "outbound.domain",Port = 587,DeliveryMethod = SmtpDeliveryMethod.Network,UseDefaultCredentials = false,Credentials = new NetworkCredential("email@domain.com","")
};
var items = await _context.MailQueues.Take(range).ToListAsync();
MailMessage message = new MailMessage();
foreach (var item in items)
{
try
{
message.From = new mailaddress(item.From);
message.Subject = item.Subject; // The subject is being filled correctly in my situation,but when the email arrives it isn't
message.IsBodyHtml = true;
message.To.Add(item.To);
message.Body = item.Content;
if (send)
{
AddAttachments(message,item.Docs);
client.Send(message);
_context.MailQueues.Remove(item);
message.To.Clear();
}
}
catch(Exception ex)
{
item.Exception = ex.ToString();
_context.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
附件方法:
private void AddAttachments(MailMessage message,string docs)
{
if (docs != null)
{
List<string> list = JsonConvert.DeserializeObject<List<string>>(docs);
foreach (string item2 in list)
{
Attachment item = new Attachment(HttpContext.Current.Server.MapPath("/wwwroot/documents/") + item2)
{
Name = item2
};
message.Attachments.Add(item);
}
}
}
我的域的结构:
domain.com> webapplicatie(包含我的Web应用及其wwwroot文件夹)
domain.com> webapi(包含我的web API)
domain.com>邮件队列(我的控制台应用程序的位置)
我的目标是发送带有可选附件的邮件,该附件位于Web应用程序的wwwroot文件夹及其主题中。 MailQueue对象的所有数据都已填充!但我仍然遇到这个问题。
有人知道解决方案吗?