使用TIdSmtp发送电子邮件时更改发件人

时间:2015-06-20 16:17:19

标签: delphi email delphi-xe7 indy10

我正在制作一个用于数字营销的电子邮件系统,我有一个问题是使用Indy10更改发件人的名字,它始终采用在帐户中注册的标准名称。我想改名字。

var
  IdBody: TIdText;

begin
 with IDSMTP do
  begin
   if Connected then
    Disconnect();
   Host := edtSMTP.Text;
   Password := edtSenha.Text;
   Port := sePorta.Value;
   Username := edtRemetente.Text;
   with IdSSLIOHandlerSocketOpenSSL.SSLOptions do
    begin
     SSLVersions := [];
     if cbxSSLV2.Checked then
      SSLVersions := [sslvSSLv2];
     if cbxSSLV23.Checked then
      SSLVersions := SSLVersions + [sslvSSLv23];
     if cbxSSLV3.Checked then
      SSLVersions := SSLVersions + [sslvSSLv3];
     if cbxTLSV1.Checked then
      SSLVersions := SSLVersions + [sslvTLSv1];
     if cbxTLSV11.Checked then
      SSLVersions := SSLVersions + [sslvTLSv1_1];
     if cbxTLSV12.Checked then
      SSLVersions := SSLVersions + [sslvTLSv1_2];
    end;

   case cbxAutenticacao.ItemIndex of
     1:  UseTLS := utNoTLSSupport;
     2:  UseTLS := utUseImplicitTLS;
     3:  UseTLS := utUseRequireTLS;
     4:  UseTLS := utUseExplicitTLS;
   end;

   Connect;
   Authenticate;
   with IdMessage do
    begin
     MessageParts.Clear;
     Subject := edtAssunto.Text;
     MessageParts.Clear;
     IdBody := TIdText.Create(MessageParts);
     try
      IdBody.ContentType := 'text/html';
      IdBody.Body.Text := mEngenharia.Text;
      if edtAnexo.Text <> '' then
       begin
        if FileExists(edtAnexo.Text) then
         TIdAttachmentFile.Create(MessageParts, TFileName(edtAnexo.Text));
       end;
      From.Address := edtDestinatario.Text;
      Recipients.EMailAddresses := edtDestinatario.Text;
      BccList.EMailAddresses := edtDestinatario.Text;
      Send(IdMessage);
      ShowMessage('Email enviado com sucesso!');
     finally
      FreeAndNil(IdBody);
     end;
    end;
  end;
end;

1 个答案:

答案 0 :(得分:2)

我在此代码中看到的主要问题是您为edtDestinatario.TextTIdMessage.From.AddressTIdMessage.Recipients.EMailAddresses属性分配了相同的值(TIdMessage.BccList.EMailAddresses)。您不应该这样做(除非向您自己发送测试电子邮件)。您需要将TIdMessage.From属性设置为发送电子邮件的人员的姓名/地址,并且TIdMessage.RecipientsTIdMessage.BccList包含相同的地址列表是没有意义的。然后,这些收件人将收到重复的电子邮件。

如果发送电子邮件的人的地址与您用来发送电子邮件的SMTP帐户的所有者不同,则需要设置TIdMessage.Sender.Address属性或可选{ {1}}方法的{1}}参数,指向帐户所有者的真实地址。当AFrom向服务器发送TIdSMTP.Send()命令时,它必须指定电子邮件的实际发件人,然后SMTP服务器验证该发件人以确保允许发送电子邮件(即使您事先已经通过服务器验证过)。在该命令中,TIdSMTP指定MAIL FROM地址(如果提供),否则为TIdSMTP(如果提供),否则为AFrom地址。

TIdMessage.Sender.Address命令中指定的发件人的处理方式与TIdMessage.From.Address生成的MAIL FROMFrom电子邮件标头的处理方式不同。事实上,Sender生成的实际电子邮件数据按原样发送给每个收件人,就SMTP服务器而言,它只是任意数据。服务器不应该乱用它,除了为追踪和路由目的插入额外的标头。因此,无论您为TIdMessageTIdMessage属性分配Name,这都是收件人将看到的名称。

TIdMessage.From