[英]Change sender when sending email with TIdSmtp
我正在制作一个用于数字营销的电子邮件系统,但是在使用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;
我这个代码中看到的主要问题是,你正在分配相同的值( edtDestinatario.Text
)到TIdMessage.From.Address
, TIdMessage.Recipients.EMailAddresses
和TIdMessage.BccList.EMailAddresses
性能。 您不应该这样做(向自己发送测试电子邮件时除外)。 您需要将TIdMessage.From
属性设置为发送电子邮件的人的名称/地址,并且TIdMessage.Recipients
和TIdMessage.BccList
包含相同的地址列表是没有意义的,因为那些收件人将收到重复的TIdMessage.BccList
电子邮件。
如果谁在发送电子邮件的人的地址是不一样的,你正在使用与发送电子邮件的SMTP帐户的拥有者,你需要设置TIdMessage.Sender.Address
财产,或可选AFrom
的参数TIdSMTP.Send()
方法,到帐户所有者的真实地址。 当TIdSMTP
将MAIL FROM
命令发送到服务器时,它必须指定电子邮件的实际发件人,然后SMTP服务器将对其进行验证,以确保允许其发送电子邮件(即使您事先已经通过服务器进行了身份验证)。 在该命令, TIdSMTP
指定AFrom
如果提供的话,否则,地址TIdMessage.Sender.Address
如果提供的话,否则TIdMessage.From.Address
地址。
即在指定的发送者MAIL FROM
命令被处理不同于From
和Sender
的电子邮件标题TIdMessage
生成。 实际上, TIdMessage
生成的实际电子邮件数据按原样发送给每个收件人,就SMTP服务器而言,它只是任意数据。 除了插入用于跟踪和路由目的的其他标头之外,服务器不应弄乱它。 所以,无论Name
分配给TIdMessage.From
和TIdMessage.Sender
特性,那就是收件人将看到的名称。
with IdMessage do
begin
Clear;
try
Subject := edtAssunto.Text;
if FileExists(edtAnexo.Text) then
begin
ContextType := 'multipart/mixed';
IdBody := TIdText.Create(MessageParts);
IdBody.ContentType := 'text/html';
IdBody.Body.Text := mEngenharia.Text;
TIdAttachmentFile.Create(MessageParts, edtAnexo.Text);
end else
begin
ContentType := 'text/html';
Body.Text := mEngenharia.Text;
end;
From.Address := ...;
From.Name := ...;
Sender.Address := ...; // if different than From.Address
Recipients.EMailAddresses := edtDestinatario.Text;
Send(IdMessage);
finally
Clear;
end;
ShowMessage('Email enviado com sucesso!');
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.