邮件附件不能通过

本文关键字:不能 | 更新日期: 2023-09-27 18:09:28

我有一个c#程序,它使用fileuploader控件来收集电子邮件附件的文件名的路径。当我在调试中运行带有附件的网页时,一切都很好,电子邮件附带了附件。然而,当我将它部署到服务器时,电子邮件通过了,但附件没有。

MailMessage message = new System.Net.Mail.MailMessage();
    message.To.Add("test1@test.com");
    message.Subject = "Project Created";
    message.From = new MailAddress("noreply@test.com");
    message.Body = "You have recieved a project request from " + TxtContactName.Text + " Project Name: " + TxtProjectName.Text + " Priority: " + DDLPriority.SelectedValue.ToString() + " Business Area: " + DDLBusinessArea.SelectedValue.ToString();
    if (FileUpload1.FileName.Length > 0)
    {
        if (File.Exists(FileUpload1.PostedFile.FileName))
            message.Attachments.Add(new Attachment(FileUpload1.PostedFile.FileName));
    }
    SmtpClient smtp = new SmtpClient("PMFex02");
    NetworkCredential cred = new NetworkCredential();
    cred.UserName = "test@test.com";
    cred.Password = "test";
    cred.Domain = "test.com";
    smtp.UseDefaultCredentials = false;
    smtp.Send(message);

我已经尝试了有无凭据设置,但它的行为方式相同。知道为什么附件在部署到服务器时不能通过吗?

邮件附件不能通过

在邮件主题或正文中添加一些额外的内容,以查看您进入附件的程度:

MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add("test1@test.com");
message.Subject = "Project Created";
message.From = new MailAddress("noreply@test.com");
message.Body = "You have recieved a project request from " + TxtContactName.Text + " Project Name: " + TxtProjectName.Text + " Priority: " + DDLPriority.SelectedValue.ToString() + " Business Area: " + DDLBusinessArea.SelectedValue.ToString();
if (FileUpload1.FileName.Length > 0)
{
  message.Subject .= string.Format(" ({0} bytes)", FileUpload1.FileName.Length);
  if (File.Exists(FileUpload1.PostedFile.FileName))
  {
    message.Subject .= " E";
    message.Attachments.Add(new Attachment(FileUpload1.PostedFile.FileName));
  }
}

它可能只对你有意义,但如果它留在那里,也不会有什么坏处。

看起来您实际上没有使用您的凭据进行身份验证,这可能会导致附件在垃圾邮件过滤器中被丢弃。试试这个:

SmtpClient smtp = new SmtpClient("PMFex02");
NetworkCredential cred = new NetworkCredential();
cred.UserName = "test@test.com";
cred.Password = "test";
cred.Domain = "test.com";
smtp.UseDefaultCredentials = false;
smtp.Credentials = cred;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(message);

您可能还希望添加一个比默认值更高的smtp.Timeout值,可能还需要防止文件被认为太大。