web-dev-qa-db-ja.com

TLSを使用してDELPHI(Indy)からSMTPを送信するGmailを使用する

INDYを使用して、ポート25でSMTPクライアントを使用して電子メールを問題なく送信しています。

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

誰でもそれを行う方法の簡単なサンプルを提供できますか?.

ありがとう

14
DRokie

このコードはGMailで機能します。

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;
7
Steve F

IdSSLIOHandlerを機能させるには、SSLdllが必要です。

Indy SSL Website にリダイレクトされる情報があります Fulgan Download Site

プラットフォームに適した1つのパッケージをダウンロードしてから、2つのdllをアプリケーションに含めることができます。私自身、その2つのdllをindyコンポーネントとともに使用して、2年以上にわたって電子メールでメールを送信しています。唯一の問題は、送信が非常に遅いことです。

1
Justmade

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

ここでの説明 を参照してください。

実際、Yはこの構成を使用してGMailを使用してメールを送信し、正しく機能します。

  • MailServer = smtp.gmail.com
  • PortServer = 465
  • FromText = account @ gmail.com(メールと同じ)
  • SSLMethod = sslvTLSv1