2015-06-20 131 views
0

我正在爲數字營銷製作電子郵件系統,並且使用Indy10更改發件人姓名時遇到問題,它始終採用帳戶中註冊的標準名稱。我想改變這個名字。當使用TIdSmtp發送電子郵件時更改發件人

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; 
+2

請給出你的實際代碼,並用一個例子來澄清你正在努力完成的事情。 'TIdMessage'具有'From'和'Sender'屬性,'TIdSMTP'已經重載'Send()'方法,如果你想使用一個不同於'TIdMessage'中指定的發送者的' 。 –

+0

@RemyLebeau我改變了這個帖子,ai想要以下內容,例如在hotmail中,第一列和名稱,第二個主題,我想在那裏更改名稱,例如讓公司向inves註冊名稱電子郵件 –

+1

我看到您爲發件人設置了與收件人地址相同的電子郵件地址,可能是因爲您的SMTP服務器不允許這樣做。 – whosrdaddy

回答

2

主要的問題我這段代碼看到的是,你要分配相同的值(edtDestinatario.Text)到TIdMessage.From.AddressTIdMessage.Recipients.EMailAddressesTIdMessage.BccList.EMailAddresses性能。您不應該這樣做(除了向您發送測試電子郵件時)。您需要將TIdMessage.From屬性設置爲發送電子郵件的人員的姓名/地址,並且TIdMessage.RecipientsTIdMessage.BccList包含的地址列表沒有意義,因爲這些收件人將收到重複的電子郵件。

如果發送電子郵件的人的地址與用於發送電子郵件的SMTP帳戶的所有者不同,則需要設置TIdMessage.Sender.Address屬性或可選的AFrom參數TIdSMTP.Send()方法,給賬戶所有者的真實地址。當TIdSMTP向服務器發送MAIL FROM命令時,它必須指定電子郵件發件人的實際,然後SMTP服務器將驗證該電子郵件以確保允許發送電子郵件(即使您已事先已經與服務器進行了身份驗證) 。在該命令中,TIdSMTP指定了AFrom地址(如果提供),否則提供TIdMessage.Sender.Address,否則爲TIdMessage.From.Address地址。

即在MAIL FROM命令中指定的發送者比FromSender電子郵件的標頭TIdMessage產生區別對待。實際上,TIdMessage生成的實際電子郵件數據被髮送原樣爲給每個收件人,就SMTP服務器而言,它只是任意數據。服務器不應該混淆它,除了插入額外的頭文件用於跟蹤和路由目的。所以無論Name您分配給TIdMessage.FromTIdMessage.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; 
相關問題