Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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#SmtpClient电子邮件代码的可靠性(当涉及图像时)_C#_Email_Graphics_Html Email_Smtpclient - Fatal编程技术网

C#SmtpClient电子邮件代码的可靠性(当涉及图像时)

C#SmtpClient电子邮件代码的可靠性(当涉及图像时),c#,email,graphics,html-email,smtpclient,C#,Email,Graphics,Html Email,Smtpclient,据我所知,在我的C#Dot Net 4.0 web应用程序中有一段相对普通的SMTP客户端代码。这已经很好地工作了一段时间了,用最少的HTML格式生成文本消息。(如果内存可用,则基于此:) 现在,超级大国想要添加图形。细节尚未最终确定,但目前我假设他们希望自己使用图形图像,或者将其作为一些HTML构造的背景 坦率地说,我不是电子邮件专家。经过一段时间的黑客攻击后,我设法让它正常工作了。(此黑客基于此:我还向MessageInfo对象添加了一个备选视图列表,以便在主邮件例程中进行处理。徽标图像本身

据我所知,在我的C#Dot Net 4.0 web应用程序中有一段相对普通的SMTP客户端代码。这已经很好地工作了一段时间了,用最少的HTML格式生成文本消息。(如果内存可用,则基于此:)

现在,超级大国想要添加图形。细节尚未最终确定,但目前我假设他们希望自己使用图形图像,或者将其作为一些HTML构造的背景

坦率地说,我不是电子邮件专家。经过一段时间的黑客攻击后,我设法让它正常工作了。(此黑客基于此:我还向MessageInfo对象添加了一个备选视图列表,以便在主邮件例程中进行处理。徽标图像本身是项目的一部分,位于根目录中。)

我有几点担心。
首先,这有多普遍?这是最好的方法吗?有多少种类型的邮件服务器能够接收并正确显示此信息

在我的测试中,当我通过公司服务器在Outlook中将其发送给我自己时,这项操作成功。当我试图将此消息发送到我在雅虎或Gmail的个人帐户时,此消息不会到达。(是的,我已经检查了垃圾邮件桶。)

建议

MessageInfo mi = new MessageInfo();
MessageStatusInfo msi = new MessageStatusInfo();
EmailAgent ea = new EmailAgent();         
ea.minfoDefaultCommunicationSettings = new DefaultCommunicationSettingsInfo();
mi.EmailToAddresses.Add("AnAddress@MyCompany.com");            
mi.EmailFrom = "Someone@MyCompany.com";
mi.EmailSubject = "Email Test";
mi.IsBodyHtml = true;
mi.SMTPServer = "My Company's Email Server";
string str = "<html><body><table border='5'><tr><td><img src=\"cid:image1\"></td></tr></table></body></html>";
AlternateView av = AlternateView.CreateAlternateViewFromString(str, null, MediaTypeNames.Text.Html);
LinkedResource lr = new LinkedResource(Server.MapPath("logo.jpg"), MediaTypeNames.Image.Jpeg);
lr.ContentId = "image1";
av.LinkedResources.Add(lr);
mi.avc.Add(av);            
msi = ea.SendMail(mi);
MessageInfo mi=newmessageinfo();
MessageStatusInfo msi=新建MessageStatusInfo();
EmailAgent ea=新的EmailAgent();
ea.minfoDefaultCommunicationSettings=新的DefaultCommunicationSettingsInfo();
mi.EmailToAddresss.Add(“AnAddress@MyCompany.com");            
mi.EmailFrom=”Someone@MyCompany.com";
mi.EmailSubject=“电子邮件测试”;
mi.IsBodyHtml=true;
mi.SMTPServer=“我公司的电子邮件服务器”;
字符串str=“”;
AlternateView av=AlternateView.CreateAlternateView-FromString(str,null,MediaTypeNames.Text.Html);
LinkedResource lr=新的LinkedResource(Server.MapPath(“logo.jpg”)、MediaTypeNames.Image.Jpeg);
lr.ContentId=“image1”;
av.LinkedResources.Add(lr);
mi.avc.Add(av);
msi=ea.SendMail(mi);

在msi=ea.SendMail(mi)周围放置try/catch块;在公司之外的电子邮件中产生任何错误?显然没有。我将我的公司地址和雅虎地址都添加到EmailToAddresses集合中,结果显示邮件已成功发送。我像往常一样把它放在我的公司信箱里,但在雅虎什么也没有。然后,我把信息单独发送到我的雅虎地址,同样的成功信息,但在我的雅虎帐户中仍然没有。我想离开公司可能会有一些奇怪的延迟,如果它在几个小时后出现,我会在这里发布,但在这个时候,我对此表示怀疑。因为你使用的是EmailAgent而不是SmtpClient,我注意到你没有使用默认队列以外的任何东西。请特别参阅第4.1节“消息队列:概述”,请原谅我的经验不足。我将阅读该参考资料,但我不理解您的陈述“EmailAgent而不是SmtpClient”。ea.SendMail方法依次调用System.Net.Mail.SmtpClient对象。EmailAgent允许更广泛的消息队列、跳转、中继等。SmtpClient是更常用的子集。两者都可以。