代码之家  ›  专栏  ›  技术社区  ›  webnoob

将bcc添加到.NET邮件时,指定的字符串不是电子邮件地址所需的格式

  •  0
  • webnoob  · 技术社区  · 15 年前

    我在发送的电子邮件中添加了一个bcc字段,并在主题行中获取错误信息。当我对密件抄送行进行评论时,一切都正常,所以我不确定出了什么问题。这是我正在使用的代码(它在delphi.net中,但主体与c和vb相同):

    procedure TEmail.SendEmail(From, SendTo, CC, Subject, Body, BCC: String; Html: Integer);
    var
      Mail: MailMessage;
      Smtp: SMTPClient;
    begin
      Mail := MailMessage.Create(From, SendTo);
      Smtp := SMTPClient.Create;
    
      if CC <> '' then Mail.CC.Add(CC);
      if BCC <> '' then Mail.Bcc.Add(BCC);
      Mail.Subject := Subject;
      Mail.Body := Body;
      if Html = -1 then Mail.IsBodyHtml := True else Mail.IsBodyHtml := False;
    
      Smtp.DeliveryMethod := SmtpDeliveryMethod.PickupDirectoryFromIis;
      try
         Smtp.Send(Mail);
      except
         Smtp.DeliveryMethod := SmtpDeliveryMethod.Network;
         try
            Smtp.Send(Mail);
         except
            raise;
         end;
      end;
    end;
    

    我尝试用mailaddress和mailaddresscollection来代替,但仍然收到相同的错误。当我调试它时,传递的参数是:

    SendEmail(reg@website.com, addtest@test.com, email@test.com, email@test.com, Thanks for registering, Some Body Text);
    

    如您所见,cc和bcc电子邮件地址相同,但只有当 Mail.Add.Bcc 线路在那里。

    编辑:堆栈跟踪的一部分:

    [FormatException: The specified string is not in the form required for an e-mail address.]
       System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset, String& displayName) +1296
       System.Net.Mail.MailAddressCollection.ParseValue(String addresses) +102
    

    有人知道为什么会这样吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Michael Madsen    15 年前

    我计算了调用中的6个参数,但签名中的7个参数——调用中的顺序甚至看不到与签名中的匹配;该方法希望主题和主体在bcc地址之前,但它们放在bcc地址之后。

    如果我们假设参数数量上的差异是由于重载的版本使用默认值调用了这个函数,那么问题很可能是参数顺序:您正在传递应该传递bcc地址的方法体,显然该体不能作为bcc地址工作。

    推荐文章