Указанная строка не в форме, необходимой для адреса электронной почты при добавлении BCC в .net mail - PullRequest
0 голосов
/ 01 октября 2010

Я добавил поле скрытой копии в свое электронное письмо, которое я отправляю и получаю сообщение об ошибке в строке темы. Все отлично работает, когда я закомментирую строку 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 Ответ

1 голос
/ 01 октября 2010

Я считаю 6 параметров в вызове, но 7 в сигнатуре - и порядок в вызове даже не соответствует таковому в подписи;метод ожидает, что субъект и тело будут находиться перед адресом BCC, но вместо этого они помещаются после адреса BCC.

Если предположить, что расхождение в количестве параметров происходит из-за перегруженной версии, котораяпросто вызывает эту функцию со значением по умолчанию, тогда, скорее всего, проблема заключается в порядке параметров: вы передаете тело метода, где вы должны передавать адрес BCC, и, очевидно, тело не будет работать как адрес BCC.

...