質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

2521閲覧

Python3でメアドの存在確認をしたいです。

rell2

総合スコア15

DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/16 14:29

前提・実現したいこと

Pythonでこちらの記事を参考にして、メールアドレスの存在を行いたいです。しかし、下記のエラーがでました。

発生している問題・エラーメッセージ

main.py:17: DeprecationWarning: please use dns.resolver.resolve() instead records = dns.resolver.query(mail_domain, 'MX') gmail-smtp-in.l.google.com. [WinError 10051] 到達できないネットワークでソケット操作を実行しようとしました。

該当のソースコード

Python

1import re 2import dns.resolver 3import socket 4import smtplib 5 6mail_address = 'test777@gmail.com' 7 8# メールアドレス構文チェック 9match = re.match('[A-Za-z0-9._+]+@[A-Za-z]+.[A-Za-z]', mail_address) 10if match == None: 11 print('Syntax error') 12 exit() 13 14# ドメインチェック 15mail_domain = re.search("(.*)(@)(.*)", mail_address).group(3) # ドメイン部分の取り出し 16try: 17 records = dns.resolver.query(mail_domain, 'MX') 18 mxRecord = records[0].exchange 19 mxRecord = str(mxRecord) 20 print(mxRecord) 21except Exception as e: 22 print('None of DNS query names exist') 23 exit() 24 25# メールアドレス存在チェック 26local_host = socket.gethostname() 27 28server = smtplib.SMTP(timeout=5) 29server.set_debuglevel(0) 30 31try: 32 server.connect(mxRecord) 33 server.helo(local_host) 34 server.mail('test@example.com') 35 code, message = server.rcpt(str(mail_address)) 36 server.quit() 37 38 if code == 250: 39 print('Address exists') # 250 OK 40 else: 41 print('Address does not exists') 42except Exception as e: 43 print(e)

試したこと

dns.resolver.queryの代わりに、dns.resolver.resolveを使用しましたが、解決しませんでした。また、VPNは使用していません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ポート番号を指定していないだけでは?

メールサーバーとして「gmail-smtp-in.l.google.com」が取得できているので、ドメイン部をメールサーバーとして使用しているわけではないし、私の環境からはgmail-smtp-in.l.google.com:25にtelnetで接続できました。
リレーサービスについては、gmailのアドレスを送信者としてメールを送信する場合に使用するもので、gmailのアドレスを受信者とする場合には必要ないはずです。

ただし、最近のメールサーバーは、メールアドレスが存在しなくても、その場でエラーを返さない設定のものが多いはずです。(実在するメールアドレスを特定されないように)

投稿2021/12/17 10:10

m-take

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

gmail.com ドメインに限って言えば、おそらくパブリックネットワークから gmail.com の MX レコードに登録されているサーバ群への直接の接続はできないものと思われます(フィルタリングされているはずです)。

以下の文書に記載されている推奨手段が代替になるかもしれません。

プリンタ、スキャナ、アプリからのメール送信 - Google Workspace 管理者 ヘルプ

SMTP リレーサービスを使用する(推奨)

デバイスからのメール送信には、IP アドレスで認証される、Google Workspace の SMTP リレーサービスを使用することをおすすめします。SMTP リレーサービスを使用すると、デバイスまたはアプリで組織の内外にメールを送信できます。これが最も安全な方法です。

要件

SMTP サービスの完全修飾ドメイン名 smtp-relay.gmail.com
設定オプション ポート 25、465、または 587
セキュア ソケット レイヤ(SSL)/ トランスポート レイヤ セキュリティ(TLS)プロトコル

bash

1$ telnet-ssl -z ssl smtp-relay.gmail.com 465 2Trying 142.251.8.28... 3Connected to smtp-relay.gmail.com. 4Escape character is '^]'. 5220 smtp-relay.gmail.com ESMTP oc15sm2330347pjb.12 - gsmtp

投稿2021/12/16 15:02

編集2021/12/16 15:10
melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メールアドレスのドメイン部だけを取り出してもSMTPサーバアドレスにはなりません。
#なるヤツもあるけど

投稿2021/12/16 14:49

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問