c#如果存在附件,则SMTP电子邮件不会发送
我正在使用System.Net.Mail命名空间创建和发送电子邮件。正在using System.Transactions.TransactionScope块中进行smtp.Send(mailMessage)调用。如果我没有创建任何电子邮件附件,那么一切正常。如果我添加任何附件(使用mailMessage.attachments.add(attachment)),则不会抛出任何错误,但电子邮件不会传递给收件人-它似乎会消失在以太中。任何人都能想出一个原因,为什么添加附件会导致电子邮件发送完全失败(但没有例外!)c#如果存在附件,则SMTP电子邮件不会发送,c#,email,smtp,C#,Email,Smtp,我正在使用System.Net.Mail命名空间创建和发送电子邮件。正在using System.Transactions.TransactionScope块中进行smtp.Send(mailMessage)调用。如果我没有创建任何电子邮件附件,那么一切正常。如果我添加任何附件(使用mailMessage.attachments.add(attachment)),则不会抛出任何错误,但电子邮件不会传递给收件人-它似乎会消失在以太中。任何人都能想出一个原因,为什么添加附件会导致电子邮件发送完全失败
非常感谢。smpt服务器可能会拒绝带有附件的电子邮件。您要附加什么类型的文件?服务器可能会将其与病毒或垃圾邮件混淆。smpt服务器可能会拒绝带有附件的电子邮件。您要附加什么类型的文件?服务器可能会将其与病毒或垃圾邮件混淆。邮件服务器将更怀疑带有附件的邮件。您可能需要设置一个电子邮件服务器,以使邮件服务器相信您就是您所声称的人。邮件服务器将更怀疑带有附件的邮件。您可能需要设置一个,以使邮件服务器相信您就是您所声称的人。启用System.Net.mail的日志记录,并查看日志。这将至少验证邮件是否已发送。如果邮件已发送并被接受,那么您就知道问题出在邮件服务器端,您可以停止追踪重影 以下是有关如何启用日志记录的链接: 基本上,将以下内容添加到.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>
启用System.Net.Mail的日志记录,并查看日志。这将至少验证邮件是否已发送。如果邮件已发送并被接受,那么您就知道问题出在邮件服务器端,您可以停止追踪重影 以下是有关如何启用日志记录的链接: 基本上,将以下内容添加到.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>
问题在于服务器上\mailroot中的vbscript用于捕获所有电子邮件(C:\inetpub\mailroot\Script\catchall.vbs)。这不是我的应用程序的一部分,但我相信它是作为Windows server附带的默认SMTP服务器的一部分安装的 此脚本正在检查电子邮件和附件,并基于附件阻止电子邮件。第62行文件中的以下代码已注释掉 '如果part.ContentMediaType=“应用程序/八位字节流”,则为'可执行附件 'ProcessMessage=true '退出功能 "完"
现在一切正常。感谢您的帮助。问题在于服务器上\mailroot中的vbscript用于捕获所有电子邮件(C:\inetpub\mailroot\Script\catchall.vbs)。这不是我的应用程序的一部分,但我相信它是作为Windows server附带的默认SMTP服务器的一部分安装的 此脚本正在检查电子邮件和附件,并基于附件阻止电子邮件。第62行文件中的以下代码已注释掉 '如果part.ContentMediaType=“应用程序/八位字节流”,则为'可执行附件 'ProcessMessage=true '退出功能 "完"
现在一切正常。感谢您的帮助。我能给出的最好解释是邮件服务器丢弃了该邮件。您要附加什么类型的文件?用户可以附加任何类型的文件。我的测试包括附加.txt文件。大多数用户都会附加.doc或.pdf文件。您应该尝试使用.docs或.pdf文件,看看是否有效。可能是因为某种奇怪的原因不允许。text我能想到的最好的解释是邮件服务器丢弃了该邮件。您要附加什么类型的文件?用户可以附加任何类型的文件。我的测试包括附加.txt文件。大多数用户都会附加.doc或.pdf文件。您应该尝试使用.docs或.pdf文件,看看是否有效。可能是出于某种奇怪的原因,不允许.text用户可以附加任何类型的文件。我的测试包括附加.txt文件。大多数用户将附加.doc或.pdf文件。用户可以附加任何类型的文件。我的测试包括附加.txt文件。大多数用户将附加.doc或.pdf文件