delphi
  • email
  • synapse
  • 2013-03-24 9 views 4 likes 
    4

    제발, 지금이 12 시간 이상 동안이 "문제"를 해결하려고 노력 중입니다 ... 그리고 거의 미쳐 가고 있습니다! 필자는 Delphi와 Synapse (http://synapse.ararat.cz)를 사용하여 한 번에받는 사람 (대상) 이상의 동일한 전자 메일을 보낼 수 없다고 생각합니다.Delphi 및 Synapse를 사용하여 한 번에 둘 이상의 수신자에게 전자 메일을 보내는 방법은 무엇입니까?

    sEmails := '[email protected];[email protected]'; 
    

    여기에 있습니다 : 그냥이 같은,(), 누군가가 나는 점 세미콜론으로 구분 된 전자 메일을받을 경우

    글쎄, 내가하는 sEmail 변수가 :) 잘못된 생각을 가르쳐주세요 내가 사용하고있는 코드 :

    dSMTP := TSMTPSend.Create; 
    dSMsg := TMimeMess.Create; 
    Try 
        With dSMsg, Header Do 
        Begin 
        Date := Now; 
        Priority := mp_Normal; 
        CharsetCode := ISO_8859_1; 
        From := '[email protected]'; 
        ToList.Delimiter := ';'; 
        ToList.DelimitedText := sEmails; 
        Subject := 'Message Subject'; 
        dPart := AddPartMultipart('mixed', nil); 
        AddPartHTML('<h1>Message Text</h1>', dPart); 
        EncodeMessage; 
        end; 
        With dSMTP Do 
        Begin 
        TargetHost := 'smtp.gmail.com'; 
        TargetPort := '587'; 
        AutoTLS := True; 
        UserName := '[email protected]'; 
        Password := 'password'; 
        Try 
         If Login Then 
         Begin 
         If MailFrom('[email protected]', Length('[email protected]')) Then 
          If MailTo(sEmails) Then MailData(dSMsg.Lines); 
         Logout; 
         end; 
        Except 
         On E: Exception Do ShowMessage(E.Message); 
        end; 
        end; 
    Finally 
        dSMsg.Free; 
        dSMTP.Free; 
    end; 
    

    내가 이미이 같은 시도 :

    If Login Then 
    Begin 
        If MailFrom('[email protected]', Length('[email protected]')) Then 
        If MailTo(dSMsg.Header.ToList[0]) Then MailData(dSMsg.Lines); 
        Logout; 
    end; 
    

    ...하지만 첫 번째 전자 메일 보내졌다 :(비록 Header.CCList에있는 전자 메일의 나머지 부분을 추가합니다. 내가 쉼표에 대한 포인트 세미콜론을 변경하려고 다른 테스트에서

    (,), 같은 문제로 ...

    , 누군가가 알 수있는 내가 잘못하고있는 중이 야 제발?

    감사합니다.

    답변

    4

    documentation for SendTo에 따르면 : "주제와

    보내기"MAILDATA "(! 어떤 SMTP 헤더없이 전자 메일 텍스트)"MAILFROM "전자 메일 주소에"흔한 "전자 메일 주소 ". (하나 이상의 수신자가 필요하면 쉼표로 주소를 구분하십시오.)

    그래서이 해야 작업과 같은 (하지만 분명히하지 않기 때문에, 아래 참조)는 :

    sEMails := '[email protected],[email protected],[email protected]'; 
    .... 
    
    if MailTo(sEMails) then 
        MailData(dSMsg.Lines); 
    

    이 제대로 여러 개의 이메일 주소를 설정하는 방법이없는 것 같다 SMTPSend 구성 요소. 각각을 개별적으로 보내야합니다. 당신은, 그러나, 당신은 이미 당신의 코드에서 이전 dSMsg.Header.ToList로 추가 했으므로, 주소를 직접 분석하는 것보다 쉽게 ​​수행 할 수 있습니다 IMO

    // Declare i as an integer variable, and post all the send to addresses 
    // one at a time to the MailTo() function 
    for i := 0 to dSMsg.Header.ToList.Count - 1 do 
        MailTo(dMsg.Header.ToList[i]); 
    
    // Now send the mail body 
    MailData(dSMsg.Lines) 
    

    , 시냅스 SMTP 지원은 너무 낮은 수준 당신이하지 않으면 쉽게 사용하는 것입니다 특별히 낮은 수준의 지원이 필요합니다. Indy (Delphi 사전 설치)와 은 모두 SMTP을 훨씬 쉽게 구현할 수 있습니다. 둘 다 텍스트 및 HTML 전자 메일과 MIME 인코딩 첨부 파일을 모두 지원하며, 둘 다 gmail 작업에 필요한 TLS를 지원합니다.

    +0

    @SirRufo : @SirRufo : Synapse 설명서에서 언급 한 내용과 연결되었습니다. 그것이 틀렸다면 Synapse에게 말하십시오. :-) –

    +0

    Fortunatelly 내가 SirRufo 팁을 삭제하기 전에 받았고 문제가 해결되었습니다! 그러니, 선생님, 다시 게시하십시오, 같은 문제를 가진 다른 사람들을 돕기 위해 ... 감사합니다! – Guybrush

    +0

    모든 Synapse의 sendxxxx 유닛에서 ** SentTo **와 같은 간단한 기능은 간단하고 빠른 & 더러운 목적을위한 것이며 핵심 ** TXXXXSend ** 클래스 사용 방법을 보여줍니다.통신 소프트웨어는 일반적으로 이러한 클래스의 인스턴스로 작동합니다 (특정 프로토콜 뒤에 RFC 표준에 대한 기본 지식이있는 것으로 가정). – pf1957

    0

    다음은 여러 수신자에게 보내는 코드 샘플입니다. 먼저 TMimeMess (이 예제에서는 var Mime)를 설정해야합니다.

    +0

    안녕하세요. SirRufo가 어제 게시 한 코드와 대부분 동일한 코드입니다 (삭제되었습니다). 그것은 내 문제를 해결! 고맙습니다!! – Guybrush

     관련 문제

    • 관련 문제 없음^_^