2015-06-20 2 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()', которые используют необязательный параметр 'AFrom', если вы хотите использовать другого отправителя, кроме указанного в' TIdMessage' , –

+0

@RemyLebeau Я изменил сообщение, ai хотел следующее: в hotmail, например, первый столбец и имя, а второй предмет, я хочу изменить его там, поставить компанию, например, чтобы зарегистрировать имя в email –

+1

Я вижу, что вы задали тот же адрес электронной почты для отправителя, что и адрес получателя, возможно, ваш SMTP-сервер этого не допускает. – whosrdaddy

ответ

2

Основная проблема, которую я вижу с этим кодом, что вы назначаете такое же значение (edtDestinatario.Text) к TIdMessage.From.Address, TIdMessage.Recipients.EMailAddresses и TIdMessage.BccList.EMailAddresses свойствам. Вы не должны этого делать (кроме случаев, когда вы отправляете тестовые письма себе). Вам необходимо установить свойство TIdMessage.From на имя/адрес человека, который отправляет электронное письмо, и нет никакого смысла в том, чтобы TIdMessage.Recipients и 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, отправляются as-is каждому получателю, это просто произвольные данные в отношении 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;