我正在制作一个用于数字营销的电子邮件系统,我有一个问题是使用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;
答案 0 :(得分:2)
我在此代码中看到的主要问题是您为edtDestinatario.Text
,TIdMessage.From.Address
和TIdMessage.Recipients.EMailAddresses
属性分配了相同的值(TIdMessage.BccList.EMailAddresses
)。您不应该这样做(除非向您自己发送测试电子邮件)。您需要将TIdMessage.From
属性设置为发送电子邮件的人员的姓名/地址,并且TIdMessage.Recipients
和TIdMessage.BccList
包含相同的地址列表是没有意义的。然后,这些收件人将收到重复的电子邮件。
如果发送电子邮件的人的地址与您用来发送电子邮件的SMTP帐户的所有者不同,则需要设置TIdMessage.Sender.Address
属性或可选{ {1}}方法的{1}}参数,指向帐户所有者的真实地址。当AFrom
向服务器发送TIdSMTP.Send()
命令时,它必须指定电子邮件的实际发件人,然后SMTP服务器验证该发件人以确保允许发送电子邮件(即使您事先已经通过服务器验证过)。在该命令中,TIdSMTP
指定MAIL FROM
地址(如果提供),否则为TIdSMTP
(如果提供),否则为AFrom
地址。
TIdMessage.Sender.Address
命令中指定的发件人的处理方式与TIdMessage.From.Address
生成的MAIL FROM
和From
电子邮件标头的处理方式不同。事实上,Sender
生成的实际电子邮件数据按原样发送给每个收件人,就SMTP服务器而言,它只是任意数据。服务器不应该乱用它,除了为追踪和路由目的插入额外的标头。因此,无论您为TIdMessage
和TIdMessage
属性分配Name
,这都是收件人将看到的名称。
TIdMessage.From