Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在某些计算机上,发送带有内联图像的电子邮件时显示为ATT0001_C#_Email_Smtp_Email Attachments - Fatal编程技术网

C# 在某些计算机上,发送带有内联图像的电子邮件时显示为ATT0001

C# 在某些计算机上,发送带有内联图像的电子邮件时显示为ATT0001,c#,email,smtp,email-attachments,C#,Email,Smtp,Email Attachments,这在本地运行正常,但当我使用mac上的Outlook将它发送给公司的另一个人(同一台exchange服务器)时,它无法正常工作。取而代之的是,图像被替换为文本ATT00001,图像成为名为ATT0001的附件 首先要让它工作起来很难,下面是我使用的代码: var assembly = Assembly.GetExecutingAssembly(); var stream = assembly.GetManifestResourceStream("EmailManager.Kitten.jpg")

这在本地运行正常,但当我使用mac上的Outlook将它发送给公司的另一个人(同一台exchange服务器)时,它无法正常工作。取而代之的是,图像被替换为文本ATT00001,图像成为名为ATT0001的附件

首先要让它工作起来很难,下面是我使用的代码:

var assembly = Assembly.GetExecutingAssembly();
var stream = assembly.GetManifestResourceStream("EmailManager.Kitten.jpg");

var inlineLogo = new LinkedResource(stream, "image/jpg");
inlineLogo.ContentId = "CompanyLogo";

body = body.Replace("{logourl}", string.Format("cid:{0}", inlineLogo.ContentId));

var view = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html);
view.LinkedResources.Add(inlineLogo);

mailMessage.Body = body;
mailMessage.Subject = "Check out the kitty logo";
mailMessage.AlternateViews.Add(view);
mailMessage.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient(....);

smtp.Send(mailMessage);
身体只是一串东西,里面有一个

有什么建议我可以做修复或调试这个?或者,有没有一种方法可以链接到外部图像,而不必outlook在默认情况下阻止它(例如,它来自同一台服务器或类似服务器)


编辑:我读到一些关于Mac电脑希望在电子邮件末尾列出附件的信息,可能是这样吗?尽管我无法从上面看出如何指定这种行为。另外,我也不完全确定这是否是问题所在。

一些电子邮件客户端足够智能,可以正确显示,而另一些客户端则要求您非常具体地使用AlternateView和LinkedResource。您是否尝试过其他电子邮件客户端,例如Windows Live Mail

尝试指定AlternateView的内容类型:

view.ContentType=newcontenttype(“text/html”)

我也遇到过同样的问题,Outlook也做了同样的事情,将图像显示为未命名的附件,但是Windows Live Mail工作得非常好


快进到我们将SMTP服务器移动到Mandrill时,我们遇到了所有电子邮件客户端的相同问题,其中电子邮件显示为未命名附件,结果我们没有指定一个ContentType,它默认为“application/octet stream”

我知道这个问题有点老了,但我注意到,在使用“而不是”包装源代码时会出现一些问题。 试着这样写

希望这对某人有所帮助。

可能是解决方案之一

我发现,
\u EmailLogo1
\u EmailLogo
是空的,所以需要检查它是否为空/NULL!!如果不是空/NULL,那么应该链接它,否则不要

dynamic htmlView = AlternateView.CreateAlternateViewFromString(_Body.ToString(), null, "text/html");
if (!string.IsNullOrEmpty(_EmailLogo1)) {
    LinkedResource logo = new LinkedResource(_EmailLogo);
    logo.ContentId = "logo2";
    htmlView.LinkedResources.Add(logo);
}
if (!string.IsNullOrEmpty(_EmailLogo))
{
LinkedResource logo1 = new LinkedResource(_EmailLogo1);
logo1.ContentId = "logo1";
htmlView.LinkedResources.Add(logo1);
aMessage.AlternateViews.Add(htmlView);
}