🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1742閲覧

ラズパイ gmail送信

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/10/29 01:57

編集2019/10/29 04:26

##やろうとしていること

ラズパイからgmailを送信しようとしています。

##困っていること
プログラムを実行すると、次のエラーが発生してしまいます。
socket.errorについて調べてみているのですが、原因が分からず困っております。

text

1Traceback (most recent call last): 2 File "./13_Gmail.py", line 73, in <module> 3 send(from_addr, [to_addr], msg) 4 File "./13_Gmail.py", line 57, in send 5 smtpobj = smtplib.SMTP(SMTP, PORT) 6 File "/usr/lib/python2.7/smtplib.py", line 256, in __init__ 7 (code, msg) = self.connect(host, port) 8 File "/usr/lib/python2.7/smtplib.py", line 317, in connect 9 self.sock = self._get_socket(host, port, self.timeout) 10 File "/usr/lib/python2.7/smtplib.py", line 292, in _get_socket 11 return socket.create_connection((host, port), timeout) 12 File "/usr/lib/python2.7/socket.py", line 575, in create_connection 13 raise err 14socket.error: [Errno 101] Network is unreachable

##プログラムコード

python

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4import smtplib 5from email.mime.text import MIMEText 6from email.utils import formatdate 7import ssl 8 9FROM_ADDRESS = 'test@gmail.com' 10MY_PASSWORD = '12345' 11TO_ADDRESS = 'test@gmail.com' 12BCC = '' 13SUBJECT = 'GmailのSMTPサーバ経由' 14BODY = 'pythonでメール送信' 15 16 17def create_message(from_addr, to_addr, bcc_addrs, subject, body): 18 msg = MIMEText(body) 19 msg['Subject'] = subject 20 msg['From'] = from_addr 21 msg['To'] = to_addr 22 msg['Bcc'] = bcc_addrs 23 msg['Date'] = formatdate() 24 return msg 25 26 27def send(from_addr, to_addrs, msg): 28 #context = ssl.create_default_context() 29 smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10) 30 smtpobj.login(FROM_ADDRESS, MY_PASSWORD) 31 smtpobj.sendmail(from_addr, to_addrs, msg.as_string()) 32 smtpobj.close() 33 34 35if __name__ == '__main__': 36 37 to_addr = TO_ADDRESS 38 subject = SUBJECT 39 body = BODY 40 41 msg = create_message(FROM_ADDRESS, to_addr, BCC, subject, body) 42 send(FROM_ADDRESS, to_addr, msg)

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

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

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

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

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

CHERRY

2019/10/29 05:34

Rasberry Pi から smtp.gmail.com に接続できますか?
raspypy

2019/10/29 05:41

今、リモート環境でラズパイを使用していますが、 smtp.gmail.comへの接続は、 ping smtp.gmail.com で確認しましたところ、 応答が返ってきませんでした。 質問に掲載したプログラムコードの他に、 "mail", "mutt"コマンドでも送信してみましたが、いずれも/var/log/mail.logで確認すると、 次のメッセージが出ていました。 Oct 29 14:37:05 raspberrypi sSMTP[9012]: Unable to connect to "smtp.gmail.com" port 587. Oct 29 14:37:05 raspberrypi sSMTP[9012]: Cannot open smtp.gmail.com:587 これは何が原因なのでしょうか。
guest

回答1

0

ベストアンサー

socket.error: [Errno 101] Network is unreachable

接続先に到達できないということなんで、サーバURLを確認しよう

投稿2019/10/29 02:15

y_waiwai

総合スコア88038

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

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

raspypy

2019/10/29 02:23

いつも回答ありがとうございます。 素人質問ですみません。サーバURLは、どのようにして確認すればよいでしょうか。
y_waiwai

2019/10/29 02:44

そもそも接続方法が間違ってますね 「python gmail」でぐぐってみてください
raspypy

2019/10/29 04:11

ぐぐってみたのですが、「接続方法」の間違いに気が付けません。 すみませんが、教えていただけないでしょうか。
raspypy

2019/10/29 04:26

ありがとうございます。 教えていただいたリンクのコードで試してみましたが、やはり同じエラーがでてしまいます。
Y.H.

2019/10/29 05:36

そもそも、Raspberry Piからping smtp.gmail.comが正常に通るんでしょうか?
raspypy

2019/10/29 06:38

コメントありがとうございます。 ping smtp.gmail.com で確認しましたところ、 応答が返ってきませんでした。 質問に掲載したプログラムコードの他に、 "mail", "mutt"コマンドでも送信してみましたが、いずれも/var/log/mail.logで確認すると、 次のメッセージが出ていました。 Oct 29 14:37:05 raspberrypi sSMTP[9012]: Unable to connect to "smtp.gmail.com" port 587. Oct 29 14:37:05 raspberrypi sSMTP[9012]: Cannot open smtp.gmail.com:587 これは何が原因なのでしょうか。
Y.H.

2019/10/29 06:48

smtp.gmail.comはpingに応答しますので、 Raspberry PiがInternetに接続できてないのでは?
raspypy

2019/10/29 06:52

インターネット接続は可能です。 apt-get install や apt-get upgradeなどは、問題なく実行できます。 今の環境がプロキシサーバーを使用しているのですが、その設定もしてあります。 (プロキシの設定ができていなけれな、apt-getもできていないと思っています。) なにか方法はありますでしょうか。
Y.H.

2019/10/29 06:58

> apt-getもできていないと思っています で、port 465 や 587 はそのプロキシーサーバーはプロキシしてくれるんでしょうか? プロキシーサーバーは、httpとhttps(port 80と443)だけですよね? apt-get はhttp/httpsを使用してますよね? (http_proxy と https_proxy または、apt.confで http://proxy.example.com:8080/ とか設定してますよね?)
raspypy

2019/10/29 07:11

ネットワーク環境について素人ですみません。 私の環境のプロキシサーバは、 xxx.xxx.xxx.xxxx:8080です。 apt.confで、次のように設定しています。 Acquire::http::Proxy "http://xxx.xxx.xxx.xxx:8080"; Acquire::https::Proxy "https://xxx.xxx.xxx.xxx:8080"
Y.H.

2019/10/29 07:14 編集

もし仮にsmtp.gmail.comへのsmtp proxyをたててるのであれば、接続先はそのproxyサーバーになるはずです。
Y.H.

2019/10/29 07:17

>私の環境のプロキシサーバは、・・・略 それはhttp/httpsのプロキシーサーバーです。 smtpには利用できません。 また、apt.confは、そのファイル名の示すとおりaptコマンドの設定ファイルです。aptコマンド以外はその設定は参照しません。
raspypy

2019/10/29 07:17

理解ができず、的外れな質問ですみません。 apt.confの設定を変更するということでしょうか?(変更したら、インターネット接続がダメになりますよね?)
Y.H.

2019/10/29 07:20

まとめると、 Raspberry Piは、インターネットに接続されてません。 http/httpsを利用する際は、インターネットに接続しているhttpプロキシーサーバーを経由して利用しているだけです。
raspypy

2019/10/29 07:22

まとめていただき、やっと理解することができました。 本題に戻るのですが、smtp.gmail.comに接続するためには、どうすれば良いのでしょうか?
Y.H.

2019/10/29 07:22

その環境でどうしてもsmtp.gmail.comを使用してメールを送信したいなら、smtpプロキシーサーバーをたてるしかないです。
raspypy

2019/10/29 07:26

素人質問ですみませんが、 "smtpプロキシサーバをたてる"というのは、 今私が使用しているラズパイの設定云々ではなく、 今私がラズパイを使用しているネットワーク環境の話になるのでしょうか。
Y.H.

2019/10/29 07:35 編集

>今私がラズパイを使用しているネットワーク環境の話になるのでしょうか。 はい。そうです。 http/httpsで使用されている「https://xxx.xxx.xxx.xxx:8080/」と同様に smtp用のプロキシーサーバーを新たに構築する必要があります。
raspypy

2019/10/29 07:31

長々とありがとうございました。 ベストアンサーにできずに申し訳ありません。
Y.H.

2019/10/29 07:32

いえ。質問者さんの問題を解決できてないので。。。
raspypy

2019/10/29 07:34

度々すみません。プロキシサーバの値を書いてしまいましたので、 Y.Hさまの最後のコメントを削除申請していただけると助かります。
Y.H.

2019/10/29 07:36

編集しておきました。(コメントの編集は履歴が残らないので。)
raspypy

2019/10/29 07:38

色々ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問