我正在生成条形码图像作为来自HTTP处理程序的响应,如下所示:
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.ContentType = "image/Jpeg";
MemoryStream ms = new MemoryStream();
Bitmap objBitmap = GenerateBarcode(context.Request.Params["Code"]);
objBitmap.Save(ms, ImageFormat.Jpeg);
context.Response.BinaryWrite(ms.GetBuffer());
}
我转到http://www.MyWebsite.com/MyProject/BarCode.aspx?code=12345678,效果很好。同样,我将<img alt="" src="http://www.MyWebsite.com/MyProject/BarCode.aspx?code=12345678">
粘贴在我的网页上,效果很好。但是我在HTML电子邮件中粘贴了相同的图像标记并且没有显示(至少在MS Outlook 2007中没有显示;我还没有测试过其他电子邮件客户端。)
我猜这在某种程度上与我正在使用HTTP处理程序有关,因为电子邮件中的其他静态图像显示正常。如何修复此图像以便显示图像? (我不能只使用静态图像,因为代码是在发送电子邮件时确定的。)
更新
事实证明我没有注意到关键细节。图像不仅没有出现;相反,图像src属性被替换为“http://portal.mxlogic.com/images/transparent.gif”。我已经确定使用.aspx或.ashx扩展名会触发此替换(或者可能是除.gif或.jpg之类的图像之外的任何扩展名),并且包含URL 中的查询字符串触发此功能,即使它是标准图像扩展名。我想这是一些过于热心的安全功能。因此包括像BarCode.aspx?code = 12345678这样的图像是行不通的。
我发现我可以执行<img alt="" src="http://www.MyWebsite.com/MyProject/12345678/BarCode.jpg">
之类的操作,然后为名为BarCode.jpg的所有文件创建一个处理程序。这里12345678 /不是一个实际的路径,但是因为我将请求重定向到处理程序,所以我可以从URL中的伪路径中删除代码值。但是,我可能不得不改变一些IIS设置来处理ASP.NET处理的.jpg文件的请求,我还想确保加载除了我的BarCode.jpg之外的其他 JPEG通常
老实说,我不确定这是否值得麻烦。
答案 0 :(得分:5)
Microsoft Office Outlook 2007使用Microsoft Office Word 2007中的HTML解析和呈现引擎来显示HTML邮件正文。 more
给我们留下了一些毛茸茸的分数
Word 2007所施加的限制在article中有详细描述,但以下是一些要点:
我认为你最好的选择是使用LinkedResource类嵌入图像,比如
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("...");
mail.To.Add("...");
//set the content
mail.Subject = "Test mail";
AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Here is an embedded image." ", null, "text/html");
//create the LinkedResource (embedded image)
LinkedResource logo = new LinkedResource(GenerateBarcode(Code)));
logo.ContentId = "logo";
htmlView.LinkedResources.Add(logo);
mail.AlternateViews.Add(htmlView);
//send the message
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);
答案 1 :(得分:3)
我不知道为什么它不起作用但是如果你说来自托管处理程序的网站的静态图像工作正常,你可以尝试稍微修改一下:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
using (var image = GenerateBarcode(context.Request.Params["Code"]))
{
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}
image/jpeg
答案 2 :(得分:0)
您必须将图像作为附件放置,或在邮件中使用html。可能是你的错误因Outlook而发生。
答案 3 :(得分:0)
此link表明存在问题,因为您建议安全/反垃圾邮件功能导致问题(mxlogic.com指向McAfee产品)