我正在使用System.Net.Mail命名空间创建和发送电子邮件。 smtp.Send(mailMessage)调用正在使用System.Transactions.TransactionScope块进行。如果我不创建任何电子邮件附件,那么一切正常。如果我添加任何附件(使用mailMessage.Attachments.Add(附件)),则不会抛出任何错误,但电子邮件不会传递给收件人 - 它似乎消失在以太网中。任何人都可以想到添加附件会导致电子邮件完全失败的原因(但不会引发异常!)
非常感谢。
答案 0 :(得分:2)
问题在于服务器上\ mailroot中的vbscript捕获所有电子邮件(C:\ inetpub \ mailroot \ Script \ catchall.vbs)。这不是我的应用程序的一部分,但我相信它是作为Windows Server附带的默认SMTP服务器的一部分安装的。
此脚本正在检查电子邮件和附件,并根据附件阻止电子邮件。第62行文件中的以下代码已被注释掉。
'如果part.ContentMediaType =“application / octet-stream”则为'可执行附件 'ProcessMessage = true '退出功能 '结束如果
现在一切正常。谢谢你的帮助。
答案 1 :(得分:1)
smtp服务器可以拒绝附带附件的电子邮件。你附上什么类型的文件?服务器可能会将其与病毒或垃圾邮件混淆。
答案 2 :(得分:1)
邮件服务器会更加怀疑有附件的邮件。您可能需要设置Sender Policy来说服邮件服务器您声称自己是谁。
答案 3 :(得分:1)
启用System.Net.Mail的日志记录,并查看日志。这至少会验证邮件是否已发送。如果它已被发送并被接受,那么你知道问题出在邮件服务器端,你可以退出追逐幽灵。
以下是有关如何启用日志记录的链接: http://systemnetmail.com/faq/4.10.aspx
基本上,将以下内容添加到.config文件中:
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" >
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="System.Net.trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</configuration>