メール、SMSの送受信についてお教え願います。

解決


Hiisan  2020-08-22 08:50:23  No: 149010

window10,Delphi10.3 comunityで、[送信]は、SMS,Android,Windowでも、可能 [受信」は、Windowで処理、
やりたいことことは、受信データ(text)を、window上でデータ処理をする。
 [SSL:Indy10]openssl-1.0.2q-i386-win32、[Host]smtp..gmail.com、Pop.gmail.com [port]465,110に設定しています
    component:delphi10.3のindy関係を利用しています。
[1]OpenSSLを使用した、[TAKEさまの資料]を参考に作成したのですが、下記messageが送受信共にでる。
   usename and PassWord not accepted. Learn more...... gsmtp
(A)英語解釈:原因不明
(B)ブロックされていないか確かめるため、既成ソフトで、メールで、Gmailで確認:通信異常なし
(C)SMSの送信は、可能ですが、受信方法は、解りません。AU,Dokomo等の同一メーカ間に限定されるみたいですが
 internet上でも、送信側資料は、,upされて、いますが、受信側は、資料皆無 既成ソフト:Messenger等ありますが、そこからデータ抽出法がわかりません
(D)その他の処理方法
以上 よろしくお願いいたします。


Hiisan  2020-08-22 17:36:23  No: 149011

修正 「1」Take様--->Dekoさま
   [2]pop3の番号:995


Hiisan  2020-08-23 00:17:40  No: 149012

[A]メール
   (1)username,Password:niftyでusername,Passwordを設定すると、
   送受共、可能となりましたが、受信時:画面通り表示せず、過去に表示したものも、表示します。
   画面表示通りに表示方法を、お教え願います。
  (2)Gmail:Password,usernameを、変更しましたが、通信不可でした。


take  2020-08-24 08:24:20  No: 149014

Gamilサーバーに対して SMTP送信とそれを受け取るPOP3受信をしたい。
他のソフトの設定だと送受信出来ているけどIndy10を使った通信を行うと
「usename and PassWord not accepted. Learn more...... gsmtp」
と表示されて通信出来ない。

と言うことでしょうか?

usename and PassWord not accepted はIDやパスが違うと言うより
Gmailで許可されていない方法でやってます。
の意味になると思うので

認証方式がGmail非対応の方法でやっているかと思います。
暗号化通信方式の種類によってポート番号が異なります。
また送信はGmailというよりGoogleのアカウント設定で多段階認証をONにして
別IDと別パスを作らないと送信出来ませんので確認を

一時的にその辺のセキュリティをOFFにして確認するという方式もあります。


Hiisan  2020-08-24 15:12:44  No: 149015

takeさま、ご指摘誠に、有難うございました。
ソフトは、丸まるDekoさまの[Indy10を使ってGMaliを送受信するには?(Delphi2009以降)を使用しています。
GMailもNiftyも同じもので、Port、Username、PWのみを、変えたのみです。
GMailの場合:Port,UseTLSを変えて試行は、しています。
(A)ご指摘の[また送信はGmailというよりGoogleのアカウント設定で多段階認証をONにして、
   別IDと別パスを作らないと送信出来ませんので確認を」は、
   (1)GoogleのUsernameとPasswardをSMTP,Pop3に使用して、Googleの[メール設定]で多段階認証をONにして
     確認すれば、いいのでしょうか。
  お手数ですがよろしくご指導をお願い致します。


take  2020-08-24 17:02:21  No: 149016

まず 各社毎にメールサーバーの仕様はバラバラなのでGmailに限定しますがポート番号確認を

POPサーバーは SSLが必須でポート番号は 995
IMAPサーバーもSSL必須でポート番号は993
SMTPサーバーはSSLまたはTLSで認証は必須
SSLならポート番号 465
TLSならポート番号 587
になります。

POPとIMAPは比較的簡単に接続出来ますので確認してください。
こちらはTLSのV1で接続出来ていることを確認しています。
※独自ツールですIndyではありません。

次にSMTPですが認証の設定で「PlainText(IDとパスワードの平文送信)」にしておいて
Gmailのセキュリティ設定で認証のセキュリティを切れば通ります。
直後にGoogleから「乗っ取られてませんか?」など緊急メールが来ます

で、GmailでSMTPセキュリティを通過させる方法は
多段階認証をONにした時にもらえる?IDとパスワードをメールパスワードとして利用すれば送信出来ます。
※ここは確認出来ていません。
多段階認証は使いたくないと言う場合はIndyが認証方式として「OAuth2.0」が使えれば通過できるかと思います。


Hiisan  2020-08-24 21:20:54  No: 149019

takeさま、ご丁寧な指摘有難う御座います、
こちら通信関係(インタネット、メール)ソフトも、全くの素人に付、宜しくお願い致します。(勉強不足で申し訳ありません)
「1」[多段階認証をONにした時にもらえる?IDとパスワードをメールパスワードとして利用すれば送信出来ます]の件
  多段階認証をONにした時にもらう方法:Gmailのアカウントの取得?
[2]ポート番号を変えて検討しましたが、送受不可です。
   SMTP.connect又はSMTP.send(Msg)でエラ-が発生します。
         [1]smtp CONNECT:sl3_GET_RECORD:WRONG VERSION NUM
        [2]SMTP.send :authenti caution faided
「3」PlainText(IDとパスワードの平文送信)」について
   MSG.CONTENTTYPE:text/plainでは
[4][段階認証は使いたくないと言う場合はIndyが認証方式として「OAuth2.0」が使えれば通過できるかと思います」
  取得方法
宜しくご指導ねがいます。


take  2020-08-25 11:53:02  No: 149027

多段階認証に行き着く手順は Googleアカウントの設定画面から「セキュリティ」「二段階認証」でたどり着きます。

見たところSSL/TLSのバージョンが違うエラーですかね?

こちらも1年ほどやってなかったので改めて環境を用意して実験しました。
imap.gmail.com のポート番号993でTLSv1方式を設定しました。

送受信パケットの内容を書いておきます。
※ID、Passwordは本来本物が入ります。
IDはGmailの場合、自分のメールアドレスそのものです @の右側も必要です。
Gmailでは「"」で囲まないとエラーが出ましたので囲んでいます。

* OK Gimap ready for requests from xxxxxx
->0001 LOGIN "ID" "Password"
0001 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)
->0002 SELECT INBOX
0002 BAD Unknown command

Gmailから拒否されて 「Google以外の環境からログインがありました」と警告が来ました。

しばらくアクセスが無いと自動でブロックされるみたいですね。
アカウントのセキュリティから「安全性の低いアプリへのアクセス」がブロックされているのでこれを解除します。

この後同じ設定でアクセスすると

->0001 LOGIN "ID" "Password"
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- SPECIAL-USE APPENDLIMIT=xxxxxxxx
0001 OK ID authenticated (Success)

無事通過しました。

IndyでGoogleアカウントへ本来の認証 OAuth2.0でアクセスする方法は参考出来るものが無いですね。

Indy 10.0.52でOAuth2トークンの要求方法(英語)
https://stackoverrun.com/ja/q/12025284


Hiisan  2020-08-26 21:26:22  No: 149047

take様、GMailの送受は、上手く動作しませんので、当方もう少し検討してからご指導をお願い致します。
しかしsmtp,posを[nifty]に接続すると、問題なく動作します。regeditで、検索すると、[server]にpop.nifty.com:995:1がありました。
 これは、なにを、意味は?(niftyには、毎月200円程度支払っています)
皆さまは、問題なく動作しているのでしょうか。google アカント安全性の低いアプリへの警告がでますが。


take  2020-08-27 08:57:06  No: 149048

何が起きているのかヒントが無いとこちらではわかりかねます。
Indyのプロパティに設定している値でIDとパスワード以外のものを書きだしてください。

説明しましたようにメールサーバーごとに仕様は異なります。
xxxのサーバーでは良かったがyyyではうまくいかないってのは普通です。

Gmailはメールサーバーのサービスとしてはかなり接続が難しいサーバーになります。
1年に1回ぐらいの間隔でセキュリティ関係が変わります。
2段階認証とOAuth2.0対応が3年ぐらい前からでそれに伴いセキュリティの低い接続は遮断されました。

niftyは最新のセキュリティに対応しながらも
旧形式のまま使用している人向けにも対応しているので比較的接続は簡単です。

どうしてこんなにむずかしいのか?
GmailというかGoogleが外部ツールから操作されるのが嫌なのかも?
スパムメールを送信されると困りますものね

まあ反対にGoogleAPI使えば普通に対応してますけどね。


Hiisan  2020-09-03 12:13:55  No: 149115

Takeさま、大変遅くなりましたが、取り合えず現在使用している受信部upしましたので、改善箇所が、有りましたら
ご指摘願います。(Dekoさまのもの丸写しです)
procedure TForm1.Button5Click(Sender: TObject);
var
  i,MsgCnt:integer;
  Pop3:TidPOP3;
  SSL_RCV:TIDSSLIoHandlerSocketOpenSSL;
  MSG:TidMessage;
begin
  Memo2.Lines.Clear;
  Pop3:=TidPOP3.create(nil);
  try
    {
    //  OK です
    Pop3.Host:='pop.nifty.com';
    Pop3.Port:=995;//10;//995;
    Pop3.username:='********@nifty.com';
    Pop3.Password:='********';
    }
    //ダメです
    Pop3.Host:='pop.Gmail.com';
    Pop3.Port:=995;//110;//995;
    Pop3.username:='********@gmail.com';
    Pop3.Password:='********'; //'**** **** **** ****';アプリパスワード
    //-------------------------------------
    SSL_RCV:=TIDSSLIoHandlerSocketOpenSSL.Create;
    try
      SSL_Rcv.Host:=POP3.Host;
      SSL_RCV.Port:=Pop3.Port;
      SSL_RCV.Destination:=SSL_RCV.Host+':'+Inttostr(SSL_RCV.Port);
      Pop3.IOHandler:=SSL_RCV;
      Pop3.UseTLS:=TiduseTLS.utuseImplicitTLS;   // Error:username and  Passwaord not Accepted
                   //TiduseTLS.utUseExplicitTLS;   //Error:Timeout

      POP3.Connect; // 問題点:ここでエラーがでる
      MSGCnt := POP3.CheckMessages; //サーバ上にあるメール件数を取得
      //------------------------------
      MSG:=TidMessage.create(nil);
      try
        msgcnt:=pop3.checkMessages;
        for i:=1 to MsgCnt do
        begin
          POP3.RetrieveHeader(i,msg);
          msg.NoDecode:=(LowerCase(msg.ContentTransferEncoding)<>'base64') and
                        (LowerCase(msg.ContentTransferEncoding)<>'quoted-printabe');
          pop3.Retrieve(i,msg);
          Memo2.Lines.add('Msg.Subject);
          Memo2.Lines.Add(msg.Body.Text);
        end;
      finally
        Msg.Free;
      end;
      POP3.Disconnect;
    finally
      SSL_RCV.Free;
    end;
  finally
      POP3.free;
  end;
end;
[1]username,Passwordは、メールで使用のものを、使用しています。
[2]アプリパスワード(Gmailで設定で取得の16桁コード)の検討しましたが、ダメでした。
[3]GogleAPi:習得検討中ですが、Delphiで組みたいです。
[4]Delphi10.3のProjectの配置で、exeフォルダーのSSLの*.Dllが記載は、確認しています
お忙しいところ恐縮ですが、宜しくご指摘ください。


take  2020-09-03 13:14:19  No: 149116

軽く検証したところ Connectまではあってそうなんですけど

>> Pop3.Host:='pop.Gmail.com';

転記しまちがいだと思いますが

POP3.Host := 'pop.gmail.com';

ですよね?


Hiisan  2020-09-03 13:33:33  No: 149117

Takeさま、G--->gです。確認いましたが、まだエラーです


take  2020-09-03 13:42:54  No: 149118

ではプログラムはそれで正解で gmailの設定の方でしょうか?

前半はgmailの設定
後半はDelphiとIndyでのプログラムになってます。

【DelphiでgmailのSMTPサーバーを経由してメールを送信する】
https://mam-mam.net/delphi/gmail.html


Hiisan  2020-09-03 15:27:31  No: 149119

DelphiでgmailのSMTPサーバーを経由してメールを送信する】の[1-4]のアカントにアクセスできるアプリの項目がありません
(1-4)の画面がちがいます。1-4以外は、設定は、あつていました。


take  2020-09-03 15:56:41  No: 149120

もしかしたらかなり前に説明したかも知れませんが

GmailのWeb画面より
https://mail.google.com/

画面上の歯車のアイコン「設定」をクリック
「すべての設定を表示」をクリック
上側に並ぶメニューから「メール転送とPOP/IMAP」をクリック

POPダウンロードの項目で「すべてのメールで POP を有効にする 」に設定。

Googleアカウントのマイページ
https://myaccount.google.com/

左側から「セキュリティ」をクリック

下にスクロールさせて「安全性の低いアプリのアクセス」の項目をオン

以上


Hiisan  2020-09-03 18:27:12  No: 149121

度重なるご指導誠に、有難うございます。
ご指摘通り、変更して動作させても、[username、passward not accepted]のエラーがでましたので、
Gメール再起動後、再確認すると、
1. ステータス: 17:43 以降に受信したメールに対して POP が有効<---表示:変更されている
2.すべてのメールで POP を有効にする (ダウンロード済みのメールを含む)のチェツク(緑)がなし
3.IMapは、有効にチェックが、入つている
それで17:43 以降に受信したメールに対して、チェツクが、入るかと思い新メールをGmailに入れて、確認しましたが、
まだ同じエラーがでます。
宜しくご指導を御願い致します。


Hiisan  2020-09-03 21:19:23  No: 149123

もう一度passwardを再発行してやり直すと、エラー:application-specific required」がでましたが、アプリパスワードのことでしょうか
度々お手数をおかけします。


take  2020-09-04 09:09:56  No: 149124

「安全性の低いアプリのアクセス」の項目がオンになっていない
または二段階認証が必要な接続を行っていますので
アプリケーション固有のパスワードつまり二段階認証をしてくださいってエラーが出ています。

エラー内容で検索すれば原因が出てくるかと思いますので検索に慣れましょう。
エラー内容を翻訳するだけで答え出てきましたよ。

原文:application-specific required
翻訳:アプリケーション固有が必要


Hiisan  2020-09-04 12:11:15  No: 149126

再度の確認ですが、下記アイテムが、ありません。この設定を2段階設定と勘違いして居るみたいです。
[安全性の低いアプリのアクセス]と[2段階設定]どちらも必要ですね
<Googleアカウントのマイページ https://myaccount.google.com/ 左側から「セキュリティ」をクリック
下にスクロールさせて「安全性の低いアプリのアクセス」の項目をオン>
大変お忙しいところ本当に大変お手数ですが、宜しくお願い致します。


take  2020-09-04 12:36:46  No: 149127

GoogleのGmailの操作なのでここで聞いても・・・

ブラウザがChromeじゃないと出てこないのかもしれません。
ヘルプからもその操作に行き着くようになっていますので

googleのヘルプ
安全性の低いアプリと Google アカウント
https://support.google.com/accounts/answer/6010255?hl=ja

から アカウントで 安全性の低いアプリの許可がオフになっている。

を選べばオンにするための画面へ飛ぶかと

受信条件は
アカウントで 安全性の低いアプリの許可がオン
または
二段階認証を使用したアプリ専用のIDとパスワードを発行してそれを使う。

送信条件は
OAuth2.0対応の通信手順を行う
または
二段階認証を使用したアプリ専用のIDとパスワードを発行してそれを使う。

Gmailで受信出来ない原因調べるなら
メールソフトに設定してみたらどうなるのかとか色々ありかたはあるかと思います。


mam  URL  2020-09-07 14:28:17  No: 149134

https://mam-mam.net/delphi/gmail.html

では、
smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS;
となっており、utUseExplicitTLSではなくutUseImplicitTLSにすると、認証は通りませんか?


Hiisan  2020-09-08 20:53:24  No: 149135

namさま、助言有難う御座います。
私も、ご指摘の所を、参考にして、Portnum、SSLの組み合わせを、変えて検討しましたが、
現在は、YahooとNiftyは、送受とも動きますが、GMailとOutlookは、上手く動作していません。


take  2020-09-09 09:25:57  No: 149136

>>GMailとOutlookは、上手く動作していません。
Outlookで試してだめならGMail側の設定が出来てないってことでDelphiもIndyも関係無いですね。


mam  URL  2020-09-10 18:01:28  No: 149137

take様のおっしゃる通りで、
もしgmailをG suiteで使用している場合(独自ドメイン等)は、G Suiteに管理者ログインして設定してもらう必要があったと思います。(個人でログインして設定するだけでは駄目だったはず。)


Hiisan  2020-09-10 22:17:58  No: 149139

mamさま、どうもありがとうございました。
個人間でGMailでは、SMTP、POPを使用しての送受は、無料で、出来ないとゆうことですか。


mam  URL  2020-09-11 20:32:08  No: 149143

Hiisan様
今、無料のGmailのアカウントを取得(G Suiteではない)して、
https://mam-mam.net/delphi/gmail.html
にある通り、
(1)gmailの設定(POPとIMAP)、アカウント管理の「安全性の低いアプリの許可」
(2)OpenSSL 32Bit版のダウンロード
(3)https://mam-mam.net/delphi/gmail.html のソースコードをそのまま記述し、コンパイル(32Bit)。
(4)OpenSSLのlibeay32.dllとssleay32.dllファイルを、プロジェクトフォルダ\Win32\Debug に配置
(5)プログラムを実行して「Button1」をクリックする
を行いましたが
エラーは発生せず、Gmailから普通にメールが送信され、送信先でメールを受信できました。

OpenSSLは32Bit 版でしょうか。その場合はDelphiでのコンパイル時は32Bitでコンパイルし、実行ファイルと同じフォルダ内に、32Bit版のlibeay32.dllとssleay32.dllを配置して実行してみてください。
(もしかして64Bit版のOpenSSLを使用しているとか、もしくは32Bit版のOpenSSLのDLLをwindows\system32に配置しているとかではないでしょうか。)


Hiisan  2020-09-11 21:09:05  No: 149144

mamさま、使用されたSSLのVersionは、何番を、ご使用でしょうか
私は、「SSL:Indy10]openssl-1.0.2q-i386-win32」を使用しています。


mam  URL  2020-09-11 21:29:42  No: 149145

Hiisan様

今、ダウンロードしてきたばかりの
openssl-1.0.2o-x32-VC2017.zip
を使用しました。


take  2020-09-14 16:16:26  No: 149148

会話のキャッチボールもうちょっとなんとかなりませんかね?

→Aさんが案αでの確認方法を提案
←βってやりかたでやってるのだけどうまくいきません
→Cさんが案γでの確認方法を提案
←Δってやりかたでやってるのだけどうまくいきません

確認方法を提案されているのですから

1.その方法で確認したら正常に動作した
2.その方法で確認したが動作しなかった
3.そもそも確認していない

3ばっかりで新たな質問来ても・・・
GmailのアカウントがOutlook系から正常に送受信できるの確認出来ないと次の段階へ進みませんよ


Hiisan  2020-09-15 19:48:15  No: 149149

takeさま、mamさま、色々アドバイスを頂き、本当にお忙しい中有難う御座いました。
Gmail設定の問題だと、わかりましたので、取り合えずCloseさせてください。
今後共、宜しくご指導願います。原因がわかれば別途報告させていただきます。


take  2020-09-16 08:45:42  No: 149150

いや、だからさぁ
GmailのアカウントがOutlook系から正常に送受信できるのですか?
に答えてもらえませんかね?

1.送受信出来る
2.送受信出来ない
3.面倒なのでやってない


au  2020-09-16 08:52:38  No: 149151

恐らく話がかみ合ってない。
Hiisanが書いてるoutlookは、outlook.comの方。takeさんが書いてるoutlookはメールソフトのoutlookの方。
なんじゃないかな


take  2020-09-16 09:41:13  No: 149152

au様解説ありがとうございます。
OutlookってマイクロソフトのWebサービスの方のメールアカウントの事を指してたのか・・・そりゃ話がかみ合わないか

自分の発言
>>メールソフトに設定してみたらどうなるのかとか色々ありかたはあるかと思います。
のレスでOutlookが出てきたので勘違いしてました。

Windowsメールにて Gmailのアカウントを設定して送受信出来るかを試して見て下さいという意味です。
これで正常に送受信出来ればGmailの設定は正しい事になります。


Hiisan  2020-09-16 20:32:48  No: 149153

takeさま,mam様本当にお忙しいところ、ご指導本当に有難うございました。
mam様ご指示の通りで、無事Gmaiに対する送受が可能となりました。
[原因」色々の箇所の設定変更した為で、特に[安全性の低いアプリの許可:有効]が見つからなかったのが、原因でした。
  Gmailの設定の初期化し再設定し、ご指示通りにすると、動作しました。
auさま:outlook設定:[smtp]:host:outlook.office365.com port:995
                                      [pop3]host:outlook.office365.com port:587 で検討しました。
                 皆様、本当に31回に及ぶ質疑大変ご迷惑をおかけ致しました。分かれば簡単でした。
念の為、安全性の低いアプリの許可:有効]は、セキュリティー/googleへのログインの最下段近くにありました。


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








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