c#如果存在附件,则不会发送SMTP电子邮件

时间:2010-01-18 11:34:48

标签: c# email smtp

我正在使用System.Net.Mail命名空间创建和发送电子邮件。 smtp.Send(mailMessage)调用正在使用System.Transactions.TransactionScope块进行。如果我不创建任何电子邮件附件,那么一切正常。如果我添加任何附件(使用mailMessage.Attachments.Add(附件)),则不会抛出任何错误,但电子邮件不会传递给收件人 - 它似乎消失在以太网中。任何人都可以想到添加附件会导致电子邮件完全失败的原因(但不会引发异常!)

非常感谢。

4 个答案:

答案 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>