我尝试在C#中创建并发送包含html表单的电子邮件。 GMail似乎能够接受它(虽然我还没有测试后期操作),但Outlook(2007和2010)无法正确显示表单。
这是我写的代码的一个例子:
using (MailMessage mailmessage = new MailMessage())
{
mailmessage.From = new MailAddress("noreply@dummy.com");
mailmessage.To.Add("dummy@dummy.com");
mailmessage.Subject = "Some subject";
string html = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
</head>
<body>
<form id='surveyForm' method='post' action='http://www.someserver.comsomeurl'>
Survey<br /><br />
Some question ?<br />
<input type='radio' name='Q1' id='Q1_1' value='1' /><label for='Q1_1'>Yes</label><br />
<input type='radio' name='Q1' id='Q1_2' value='2' /><label for='Q1_2'>No</label><br />
Some other question ?<br />
<input type='radio' name='Q2' id='Q2_1' value='1' /><label for='Q2_1'>Yes</label> <br />
<input type='radio' name='Q2' id='Q2_2' value='2' /><label for='Q2_2'>No</label><br />
<input type='submit' value='Submit'>
</form>
</body>
</html>";
mailmessage.Body = "Some alternate text";
using (AlternateView alternate = AlternateView.CreateAlternateViewFromString(html, Encoding.UTF8, MediaTypeNames.Text.Html))
{
mailmessage.AlternateViews.Add(alternate);
SmtpClient smtp = new SmtpClient();
smtp.Host = MyHost;
smtp.Send(mailmessage)
}
}
在GMail中,电子邮件包含一个表单,但在Outlook中我得到以下内容:
Survey
Some question ?
( )Yes
( )No
Some other question ?
( )Yes
( )No
[Submit]
我尝试了以下变体:
mailmessage.IsBodyHtml = true;
mailmessage.BodyEncoding = Encoding.UTF8;
mailmessage.Body = html;
但结果是一样的。
当我检查邮件来源时,它对应于我生成的html。
我正在尝试做什么不可能,或者Outlook和其他电子邮件阅读器是否支持这种方式?
谢谢, 马克
答案 0 :(得分:0)
而不是编写自己的代码,也许尝试使用已经做过的东西。 查看http://nuget.org/packages/MvcMailer/或http://nuget.org/packages/RazorEmail/。这个包应该为你完成这项工作。