indy10を使ってAndroidデバイスでメール送受信について


がんばるぞー  2020-05-26 16:18:28  No: 148774

こんにちは。
indy10を使ってAndroidデバイスでメール送受信をするプログラムに挑戦しています。
ちなみに送信側はGmailです。
https://www.petitmonte.com/bbs/answers?question_id=8859のサイトに
なにやらヒントがあるようなのですが
紹介されていました下記のサイトをオープンすることができず・・・
https://ht-deko.com/tech040.html#tech076 
どなたかヒントを頂くことができますでしょうか。

環境は
Delphi 10.1 Berlin Enterprise
です。
よろしくお願いいたします。


HFUKUSHI  2020-05-27 20:22:59  No: 148776

DEKOさんのところ、見えませんか?こちらでは何の問題もなく表示できていますが…


arigayas  2020-05-28 09:38:26  No: 148777

自分もDEKOさんのところを問題無く見る事が出来ます。

パソコンのネットワーク設定の1つのDNSの設定を8.8.8.8とか1.1.1.1とか
有名な Public DNS にしてみるとページが表示されるかもしれません。


take  2020-05-28 16:23:54  No: 148778

もしサンプルでも送信出来ないのであれば
2018年頃に行われたGmailのセキュリティレベルアップに引っかかっているかも知れません。

Indyの送信で OAUTH2認証が設定出来るのであればそれで行けます。

対応していない場合はGoogleにログインして二段階認証を有効にして
GMail用のパスワードを取得してそちらの方を使うようにして下さい。

なお送信設定にて送信認証をPLAIN TEXTに設定して送信するとすぐにGoogleから警告が来ますので注意して下さい。


がんばるぞー  2020-05-29 16:36:52  No: 148779

HFUKUSHIさん、arigayasさん、takeさん お返事ありがとうございます。
ご指摘の通り見れました。
あの時は何だったのかな~
申し訳ありませんでした。
早速、ご案内通りことを進めたのですが、
https://ht-deko.com/tech033.html#tech062 にある
ダウンロードは ftp://indy.fulgan.com/ZIP/ から行います。
がダウンロードできませんでした。(これまた開かない)
他のサイトでダウンロードできるのでしょうか。


take  2020-05-29 16:51:33  No: 148780

ftpとして置いた先がSSL対応のため HTTPSになってますね。

https://indy.fulgan.com/SSL/

このリンクは見えますか?


がんばるぞー  2020-05-29 16:54:21  No: 148781

takeさん、早々のご回答ありがとうございます。
開けました。
沢山、ありましたがどのファイルを使うのでしょうか。


take  2020-05-29 17:07:34  No: 148782

openssl-1.0.2u-i386-win32.zip 
openssl-1.0.2u-x64_86-win64.zip

1.0.2u がバージョン番号なのでアルファベットが新しい方が良いかな?
i386-win32は32bitのOS用
x64_86-win64は64bitのOS用
環境で選びましょう


がんばるぞー  2020-06-01 13:44:59  No: 148785

takeさんご回答ありがとうございます。
頑張ります。


がんばるぞー  2020-06-02 13:41:26  No: 148787

お世話になります。
AndroidOpenssl1.0.1t.zip
AndroidOpenssl1.0.2h.zip
OpenSSL 1.0.2g Android.zip
の3つのファイルをダウンロードして
解凍したのですがDLLファイルは存在しませんでした。(どのzipファイルもlibcrypto.so、libssl.soの2つだけ)
どのように、すればよいのでしょうか。
お手数おかけしますが
ご教授の程よろしくお願いいたします。


HFUKUSHI  2020-06-02 20:24:02  No: 148789

OpenSSL - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Rio/ja/OpenSSL#iOS_.E3.82.B7.E3.83.9F.E3.83.A5.E3.83.AC.E3.83.BC.E3.82.BF.E3.80.81OS_X.E3.80.81Android_.E3.81.AE.E5.A0.B4.E5.90.88

によるとAndroidデバイスはDLLとかsoは特に必要なさそうです。

Indy ネットワーク接続のセキュリティ保護 - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Rio/ja/Indy_%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%8E%A5%E7%B6%9A%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%BF%9D%E8%AD%B7

も参考にしてください。


がんばるぞー  2020-06-03 13:14:03  No: 148791

HFUKUSHIさん ご回答ありがとうございます。
紹介いただいたURLは「RAD Studio 10.3 Rio」の資料でした。
私が使っているDelphi 10.1 Berlinでは無理のようです。
がっかり・・・
どうしようかな~


HFUKUSHI  2020-06-03 13:29:47  No: 148792

OpenSSL - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/OpenSSL#iOS_.E3.82.B7.E3.83.9F.E3.83.A5.E3.83.AC.E3.83.BC.E3.82.BF.E3.80.81OS_X.E3.80.81Android_.E3.81.AE.E5.A0.B4.E5.90.88

Indy ネットワーク接続のセキュリティ保護 - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/Indy_%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%8E%A5%E7%B6%9A%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%BF%9D%E8%AD%B7


がんばるぞー  2020-06-03 14:02:29  No: 148795

HFUKUSHIさん度々お世話になります。
ありがとうございます。
ホームにボタンを配置しClickイベントを記述しただけのものです。
Androidデバイスで実行すると
「プロジェクト****.apkは例外クラスEIdOSSLCouldNotLoadSSLLibray
(メッセージ'SSLraibraryが読み込めませんでした。)を送出しました」
という警告がでてメール送信できません。
何が原因なのかな

************************************************************
unit Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, IdTCPConnection, IdTCPClient,
  IdBaseComponent, IdComponent, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack, IdSSL, IdSSLOpenSSL;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiTb.fmx ANDROID}

uses
  IdMessage, IdSMTP,IdExplicitTLSClientServerBase, IdEMailAddress;

procedure TForm1.Button1Click(Sender: TObject);
var
  smtp: TIdSMTP;
  ssl: TIdSSLIOHandlerSocketOpenSSL;
  msg: TIdMessage;
begin

//  Client.IOHandler := TIdSSLIOHandlerSocketOpenSSL1.Create;

  smtp:=TIdSMTP.Create();
  try
    smtp.Host:='smtp.gmail.com';
    smtp.Port:=465;
    smtp.Username:='******@gmail.com';
    smtp.Password:='vds9ecuS';
    ssl:=TIdSSLIOHandlerSocketOpenSSL.Create();
    try
      ssl.Host:=smtp.Host;
      ssl.Port:=smtp.Port;
      ssl.Destination:=ssl.Host+':'+IntToStr(ssl.Port);
      smtp.IOHandler:=ssl;
      smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS;

      smtp.Connect;//接続
      msg:=TIdMessage.Create();
      try
        msg.ContentType:='text/plain';
        msg.CharSet:='UTF-8';
        msg.ContentTransferEncoding:='BASE64';
        msg.From.Address:=******@gmail.com';//メールの送り元。通常はgmailのアドレス

        msg.Recipients.Add.Address:='123456@zzzzz.co.jp' ;//送り先1人目
//        msg.Recipients.Add.Address:='hoge_to2@hoge.hoge' ;//送り先2人目。不要な場合はこの行を削除
//        msg.CCList.Add.Address    :='hote_cc1@hoge.hoge' ;//Ccの送り先。不要な場合はこの行を削除
//        msg.BccList.Add.Address   :='hoge_bcc1@hoge.hoge';//Bccの送り先。不要な場合はこの行を削除

        msg.Subject:='メールの件名を記述';

        msg.Body.Add('メール本文1行目');
        msg.Body.Add('メール本文の2行目');

        smtp.Send(msg);//メールの送信
      finally
        msg.Free;
      end;
      smtp.Disconnect();
    finally
      ssl.Free;
    end;
  finally
    smtp.Free;
  end;
end;

end.


がんばるぞー  2020-06-11 16:02:40  No: 148805

皆様、お世話になります。
あれから、色々触っていたら
「メッセージ'SSLraibraryが読み込めませんでした」のエラーはでなくなりました。
しかし、アプリのボタンをクリックすると
「SSLライブラリが読み込めませんでした」というメッセージが表示されます。

原因わかりませんでしょうか。


mam  URL  2020-06-11 18:59:54  No: 148806

こんにちは。mamと申します。
http://mam-mam.net/delphi/android_openssl_aes256.html
にあるように、android用のopensslライブラリ
ibcrypto.so
libssl.so
ファイルを、ネットから探してダウンロードして、
delphiのIDEからプロジェクト⇒配置から、上記2ファイルを配置し、
IdOpenSSLSetLibPath(System.IOUtils.TPath.GetDocumentsPath);
として、indyにopensslライブラリファイルの位置を指定してあげる必要が有るのではないでしょうか?
外していたらすいません。


がんばるぞー  2020-06-12 09:30:14  No: 148807

mamさん貴重なアドバイス誠にありがとうございます。
ibcrypto.so
libssl.so 
の2つのファイルをプログラムソースフォルダに入れて
プロジェクト > 配置 に2つのファイルを追加しました。
その2つのファイルのリモートパスは
asets\internal
です。
この状態でAndroidデバイスで実行したところ
「アドレス smtp.gmail.com の解決時にエラーが発生しました(7)」
というエラーが発生しました。
Windowsデバイスで実行すると正常にメール送信されます。

あと、mamさんのご指摘の
IdOpenSSLSetLibPath(System.IOUtils.TPath.GetDocumentsPath);
として、indyにopensslライブラリファイルの位置を指定してあげる必要が有るのではないでしょうか?

IdOpenSSLSetLibPath(System.IOUtils.TPath.GetDocumentsPath); はどこで指定すればよいのでしょうか。

お手数ですが 教えて頂けませんでしょうか。 


がんばるぞー  2020-06-12 09:54:00  No: 148808

mamさん
すみません!
AndroidデバイスのWi-Fi設定がOFFでした。
大変失礼しました。お恥ずかしい・・・

結果ですが やはり「SSLライブラリが読み込めませんでした」
というメッセージが発生してメール送信できませんでした。


がんばるぞー  2020-06-12 10:04:22  No: 148809

mamさんが教えてくれましたサイトにありました。

uses
  System.StartUpCopy,
  FMX.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  MamAndroidOpenSSL in 'MamAndroidOpenSSL.pas',
  IdSSLOpenSSL,IdSSLOpenSSLHeaders,System.IOUtils;

{$R *.res}

begin
  IdOpenSSLSetLibPath(System.IOUtils.TPath.GetDocumentsPath);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
の赤字の2行を追加して実行したら
「SSLで接続する際にエラーが発生しました。
error: 1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number」
というエラーが発生しました。


がんばるぞー  2020-06-12 14:44:40  No: 148810

お世話になります。
smtp.Portを25にしたら送信できました。
なぜ465だと送信できないのか・・・・?

送信はできたのですが
msg.Subject := 'メールの件名を記述';
の記述が????????になっています。
日本語対応にするにはどうすればよいのでしょうか?


がんばるぞー  2020-06-16 09:41:04  No: 148816

同じソースでWindowsデバイスで実行すると
subjectは日本語になるのですが
Androidデバイスでは文字化けします。
CharSet や ContentTransferEncoding を
色々変更してみたのですが
文字化けしてしまいます。
どなたか、教えて頂けませんでしょうか。 
よろしくお願いいたします。


take  2020-06-16 11:15:10  No: 148817

デバッグ出来るのであれば送信直前で止めて送ろうとしているヘッダやボディを見る。
または受信側のメールソフトで「ソースの表示」で内部構造を表示させて両者の違いを見ないとわからないですね。

メールの日本語、特にUNICODEを送ろうとすると、どうやって送るのが正しいのか不明です。


がんばるぞー  2020-06-16 15:40:40  No: 148819

takeさんお返事ありがとうございます。
受信側のメーラー(outlook2016)で
UNCODE(UTF-8)以外にすると
SUBJECTだけではなく
BODYも文字化けしてしまします。


take  2020-06-16 16:51:34  No: 148820

outlook2016の場合は

https://www.wanichan.com/pc/outlook/2016/1/18.html

の方法でヘッダを覗けますので、文字化けしているメールと正常なメールを比較してみて下さい。


mam  URL  2020-06-16 20:18:07  No: 148821

//以下プロシージャを追加
procedure TForm1.msgOnInitializeISO(var VHeaderEncoding: Char;
  var VCharSet: String);
begin
  VHeaderEncoding:='B';
  VCharSet:='UTF-8';
end;

procedure TForm1.Button1Click(Sender: TObject);
//略
  //以下一行を追加してから
  msg.OnInitializeISO:=msgOnInitializeISO;
        //メールを送信
        smtp.Send(msg);//メールの送信
//略

では如何でしょうか。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加