2011-08-12 37 views
13

私はINDYを使用してポート25のSMTPクライアントを使って問題なくメールを送信しています。Gmailを使用DELPHI(Indy)からのTLSを使用した発信SMTP

今、Gmailアカウントを使用してメールを送信する必要があります。そのためには、TLSを使用する必要があります。

誰でも簡単なサンプルを提供できますか?このコードはGMailのために働く

おかげ

+1

トップ結果が明らかになった:[インディを使用してGmailにメールを送る](HTTP://www.marcocantu.c om/tips/oct06_gmail.html) –

+1

私は過去にMarco Cantuのガイドを使用しました:http://www.marcocantu.com/tips/oct06_gmail.html – berndvf

答えて

6

は:

begin 
    IDSMTP1 := TIDSMTP.Create; 
    IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create; 
    try 

    with IDSMTP1 do 
    begin 
     Host := srvr.Host; 
     Port := srvr.Port; 
     if (srvr.needAuthentication = 'Y') then 
     AuthType := satDefault 
     else 
     AuthType := satNone; 
     IOHandler := IdSSLIOHandlerSocketOpenSSL1; 

     if (srvr.secureMode = 'Y') then 
     UseTLS := utUseRequireTLS 
     else 
     UseTLS := utNoTLSSupport; 

     Username := srvr.Username; 
     Password := srvr.Password; 
    end; 

    idMBHTML := TIdMessageBuilderHTML.Create; 
    Idmessage1 := TIDMessage.Create; 

    try 
     with idMBHTML do 
     begin 
     enc := TEncoding.Unicode; 
     HTML.LoadFromStream(FEmlMsg.MsgBody, enc); 
     for c := 0 to FEmlMsg.Attachmnts.Count - 1 do 
      Attachments.Add(FEmlMsg.Attachmnts[c]); 
     FillMessage(IDMessage1); 
     end; 

     with Idmessage1 do 
     begin 
     Subject := FEmlMsg.MsgSubject; 
     From.Address := FEmlMsg.FromAddress; 
     From.Name := FEmlMsg.FromName; 
     Recipients.EMailAddresses := FEmlMsg.RecipientAddress; 
     if FEmlMsg.ReceiptRecipientAddress <> '' then 
      ReceiptRecipient.Address := FEmlMsg.ReceiptRecipientAddress; 
     if FEmlMsg.ReceiptRecipientName <> '' then 
      ReceiptRecipient.Name := FEmlMsg.ReceiptRecipientName; 
     end; 

     with IDSMTP1 do 
     begin 
     if not Connected then 
      Connect; 
     Send(IdMessage1); 
     end; 

    finally 
     Idmessage1.Free; 
     idMBHTML.Free; 
    end; 
    finally 
    IDSMTP1.Free; 
    IdSSLIOHandlerSocketOpenSSL1.Free; 
    end; 
end; 
+0

あなた自身をテストしましたか?接続時にエラーが発生しました:EIdOSSLCouldNotLoadSSLLibraryメッセージで「SSLライブラリを読み込めませんでした」 – DRokie

+0

あなたのバージョンのIndyに正しいバージョンのOpenSSL DLLを使用していることを確認してください。 Indyの 'WhichFailedToLoad()'関数を使用して、OpenSSLの読み込みに失敗した部分を特定します。 –

+0

上記のRemyと同様に、アプリケーションと共にOpenSSL DLLファイルをインクルードする必要があります。それらは、アプリケーション実行可能ファイルと同じフォルダにあるか、システムパス(System32フォルダなど)にある必要があります。 IndyのWebサイトから最新のファイルをダウンロードできます。 –

1

あなたはIdSSLIOHandlerの仕事をするためにSSL DLLを必要とします。

あなたがお使いのプラットフォームに適した一つのパッケージをダウンロードして、あなたのアプリケーションで2つのDLLを含めることができFulgan Download Site

にリダイレクトIndy SSL Website の情報があります。私は自分自身で、インディコンポーネントを持つ2つのDLLを使用して、2年以上電子メールでメールを送信しています。唯一の問題は送信が非常に遅いことです。

0

あなたが使用しているインディのバージョンは何も言っていません。 TSL(Hotmail/GMaillの最後のセキュリティ変更)を使用するには、Indy 10を使用する必要があります。

description hereを参照してください。

実はY Gmailを使ってメールを送信するには、このconfiguractionを使用し、それが正常に動作:

  • のMailServer = smtp.gmail.com
  • PortServer = 465
  • [email protected](同じメールの) "インディ+ SMTP + Gmailの" のためのGoogleで
  • SSLMethod = sslvTLSv1
関連する問題