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)その他の処理方法
以上 よろしくお願いいたします。
修正 「1」Take様--->Dekoさま
[2]pop3の番号:995
[A]メール
(1)username,Password:niftyでusername,Passwordを設定すると、
送受共、可能となりましたが、受信時:画面通り表示せず、過去に表示したものも、表示します。
画面表示通りに表示方法を、お教え願います。
(2)Gmail:Password,usernameを、変更しましたが、通信不可でした。
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にして確認するという方式もあります。
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にして
確認すれば、いいのでしょうか。
お手数ですがよろしくご指導をお願い致します。
まず 各社毎にメールサーバーの仕様はバラバラなので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」が使えれば通過できるかと思います。
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」が使えれば通過できるかと思います」
取得方法
宜しくご指導ねがいます。
多段階認証に行き着く手順は 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
take様、GMailの送受は、上手く動作しませんので、当方もう少し検討してからご指導をお願い致します。
しかしsmtp,posを[nifty]に接続すると、問題なく動作します。regeditで、検索すると、[server]にpop.nifty.com:995:1がありました。
これは、なにを、意味は?(niftyには、毎月200円程度支払っています)
皆さまは、問題なく動作しているのでしょうか。google アカント安全性の低いアプリへの警告がでますが。
何が起きているのかヒントが無いとこちらではわかりかねます。
Indyのプロパティに設定している値でIDとパスワード以外のものを書きだしてください。
説明しましたようにメールサーバーごとに仕様は異なります。
xxxのサーバーでは良かったがyyyではうまくいかないってのは普通です。
Gmailはメールサーバーのサービスとしてはかなり接続が難しいサーバーになります。
1年に1回ぐらいの間隔でセキュリティ関係が変わります。
2段階認証とOAuth2.0対応が3年ぐらい前からでそれに伴いセキュリティの低い接続は遮断されました。
niftyは最新のセキュリティに対応しながらも
旧形式のまま使用している人向けにも対応しているので比較的接続は簡単です。
どうしてこんなにむずかしいのか?
GmailというかGoogleが外部ツールから操作されるのが嫌なのかも?
スパムメールを送信されると困りますものね
まあ反対にGoogleAPI使えば普通に対応してますけどね。
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が記載は、確認しています
お忙しいところ恐縮ですが、宜しくご指摘ください。
軽く検証したところ Connectまではあってそうなんですけど
>> Pop3.Host:='pop.Gmail.com';
転記しまちがいだと思いますが
POP3.Host := 'pop.gmail.com';
ですよね?
Takeさま、G--->gです。確認いましたが、まだエラーです
ではプログラムはそれで正解で gmailの設定の方でしょうか?
前半はgmailの設定
後半はDelphiとIndyでのプログラムになってます。
【DelphiでgmailのSMTPサーバーを経由してメールを送信する】
https://mam-mam.net/delphi/gmail.html
DelphiでgmailのSMTPサーバーを経由してメールを送信する】の[1-4]のアカントにアクセスできるアプリの項目がありません
(1-4)の画面がちがいます。1-4以外は、設定は、あつていました。
もしかしたらかなり前に説明したかも知れませんが
GmailのWeb画面より
https://mail.google.com/
画面上の歯車のアイコン「設定」をクリック
「すべての設定を表示」をクリック
上側に並ぶメニューから「メール転送とPOP/IMAP」をクリック
POPダウンロードの項目で「すべてのメールで POP を有効にする 」に設定。
Googleアカウントのマイページ
https://myaccount.google.com/
左側から「セキュリティ」をクリック
下にスクロールさせて「安全性の低いアプリのアクセス」の項目をオン
以上
度重なるご指導誠に、有難うございます。
ご指摘通り、変更して動作させても、[username、passward not accepted]のエラーがでましたので、
Gメール再起動後、再確認すると、
1. ステータス: 17:43 以降に受信したメールに対して POP が有効<---表示:変更されている
2.すべてのメールで POP を有効にする (ダウンロード済みのメールを含む)のチェツク(緑)がなし
3.IMapは、有効にチェックが、入つている
それで17:43 以降に受信したメールに対して、チェツクが、入るかと思い新メールをGmailに入れて、確認しましたが、
まだ同じエラーがでます。
宜しくご指導を御願い致します。
もう一度passwardを再発行してやり直すと、エラー:application-specific required」がでましたが、アプリパスワードのことでしょうか
度々お手数をおかけします。
「安全性の低いアプリのアクセス」の項目がオンになっていない
または二段階認証が必要な接続を行っていますので
アプリケーション固有のパスワードつまり二段階認証をしてくださいってエラーが出ています。
エラー内容で検索すれば原因が出てくるかと思いますので検索に慣れましょう。
エラー内容を翻訳するだけで答え出てきましたよ。
原文:application-specific required
翻訳:アプリケーション固有が必要
再度の確認ですが、下記アイテムが、ありません。この設定を2段階設定と勘違いして居るみたいです。
[安全性の低いアプリのアクセス]と[2段階設定]どちらも必要ですね
<Googleアカウントのマイページ https://myaccount.google.com/ 左側から「セキュリティ」をクリック
下にスクロールさせて「安全性の低いアプリのアクセス」の項目をオン>
大変お忙しいところ本当に大変お手数ですが、宜しくお願い致します。
GoogleのGmailの操作なのでここで聞いても・・・
ブラウザがChromeじゃないと出てこないのかもしれません。
ヘルプからもその操作に行き着くようになっていますので
googleのヘルプ
安全性の低いアプリと Google アカウント
https://support.google.com/accounts/answer/6010255?hl=ja
から アカウントで 安全性の低いアプリの許可がオフになっている。
を選べばオンにするための画面へ飛ぶかと
受信条件は
アカウントで 安全性の低いアプリの許可がオン
または
二段階認証を使用したアプリ専用のIDとパスワードを発行してそれを使う。
送信条件は
OAuth2.0対応の通信手順を行う
または
二段階認証を使用したアプリ専用のIDとパスワードを発行してそれを使う。
Gmailで受信出来ない原因調べるなら
メールソフトに設定してみたらどうなるのかとか色々ありかたはあるかと思います。
https://mam-mam.net/delphi/gmail.html
では、
smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS;
となっており、utUseExplicitTLSではなくutUseImplicitTLSにすると、認証は通りませんか?
namさま、助言有難う御座います。
私も、ご指摘の所を、参考にして、Portnum、SSLの組み合わせを、変えて検討しましたが、
現在は、YahooとNiftyは、送受とも動きますが、GMailとOutlookは、上手く動作していません。
>>GMailとOutlookは、上手く動作していません。
Outlookで試してだめならGMail側の設定が出来てないってことでDelphiもIndyも関係無いですね。
take様のおっしゃる通りで、
もしgmailをG suiteで使用している場合(独自ドメイン等)は、G Suiteに管理者ログインして設定してもらう必要があったと思います。(個人でログインして設定するだけでは駄目だったはず。)
mamさま、どうもありがとうございました。
個人間でGMailでは、SMTP、POPを使用しての送受は、無料で、出来ないとゆうことですか。
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に配置しているとかではないでしょうか。)
mamさま、使用されたSSLのVersionは、何番を、ご使用でしょうか
私は、「SSL:Indy10]openssl-1.0.2q-i386-win32」を使用しています。
Hiisan様
今、ダウンロードしてきたばかりの
openssl-1.0.2o-x32-VC2017.zip
を使用しました。
会話のキャッチボールもうちょっとなんとかなりませんかね?
→Aさんが案αでの確認方法を提案
←βってやりかたでやってるのだけどうまくいきません
→Cさんが案γでの確認方法を提案
←Δってやりかたでやってるのだけどうまくいきません
確認方法を提案されているのですから
1.その方法で確認したら正常に動作した
2.その方法で確認したが動作しなかった
3.そもそも確認していない
3ばっかりで新たな質問来ても・・・
GmailのアカウントがOutlook系から正常に送受信できるの確認出来ないと次の段階へ進みませんよ
takeさま、mamさま、色々アドバイスを頂き、本当にお忙しい中有難う御座いました。
Gmail設定の問題だと、わかりましたので、取り合えずCloseさせてください。
今後共、宜しくご指導願います。原因がわかれば別途報告させていただきます。
いや、だからさぁ
GmailのアカウントがOutlook系から正常に送受信できるのですか?
に答えてもらえませんかね?
1.送受信出来る
2.送受信出来ない
3.面倒なのでやってない
恐らく話がかみ合ってない。
Hiisanが書いてるoutlookは、outlook.comの方。takeさんが書いてるoutlookはメールソフトのoutlookの方。
なんじゃないかな
au様解説ありがとうございます。
OutlookってマイクロソフトのWebサービスの方のメールアカウントの事を指してたのか・・・そりゃ話がかみ合わないか
自分の発言
>>メールソフトに設定してみたらどうなるのかとか色々ありかたはあるかと思います。
のレスでOutlookが出てきたので勘違いしてました。
Windowsメールにて Gmailのアカウントを設定して送受信出来るかを試して見て下さいという意味です。
これで正常に送受信出来ればGmailの設定は正しい事になります。
takeさま,mam様本当にお忙しいところ、ご指導本当に有難うございました。
mam様ご指示の通りで、無事Gmaiに対する送受が可能となりました。
[原因」色々の箇所の設定変更した為で、特に[安全性の低いアプリの許可:有効]が見つからなかったのが、原因でした。
Gmailの設定の初期化し再設定し、ご指示通りにすると、動作しました。
auさま:outlook設定:[smtp]:host:outlook.office365.com port:995
[pop3]host:outlook.office365.com port:587 で検討しました。
皆様、本当に31回に及ぶ質疑大変ご迷惑をおかけ致しました。分かれば簡単でした。
念の為、安全性の低いアプリの許可:有効]は、セキュリティー/googleへのログインの最下段近くにありました。
ツイート | ![]() |