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

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

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

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

7733閲覧

Arduinoを使って、指定したIPアドレスからメールを送信したい

poorpoor

総合スコア25

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/10/15 04:04

M5Stick-C(ESP32機器)で取得した温度をメール送信するプログラムをArduinoで作っています。
温度を測り、ESP32 Mail Clientライブラリのサンプルを使ってOutlookにメールを送ることはできました。
が、いざ実行環境に入れると『Error sending Email, could not connect to server』とシリアルモニターに表示されて送信できません。

プログラムを改変して調べたところ、どうやらwifi.configで固定IPアドレスを使うとエラーになるようです。
これは何故でしょうか。どうすれば、wifi.configを使ったうえでメールの送信ができるようになるでしょうか?

下にプログラムを載せておきます。(wifi接続部とメール送信部分だけです)

c++

1#include <WiFi.h> 2#include <WiFiClient.h> 3#include <WebServer.h> 4#include <ESPmDNS.h> 5#include <M5StickC.h> 6#include <SPI.h> 7#include <Ethernet.h> 8#include <ArduinoJson.h> 9#include <HTTPClient.h> 10#include <WiFiMulti.h> 11 12#include <Arduino.h> 13#include "ESP32_MailClient.h" 14#include "SD.h" 15 16//The Email Sending data object contains config and data to send 17SMTPData smtpData; 18 19//Callback function to get the Email sending status 20void sendCallback(SendStatus info); 21 22void setup() 23{ 24 Serial.begin(115200); 25 Serial.println(); 26 27 Serial.print("Connecting to AP"); 28 wifi_connect(); 29 30 Serial.println(""); 31 Serial.println("WiFi connected."); 32 Serial.println("IP address: "); 33 Serial.println(WiFi.localIP().toString().c_str()); 34 35 Serial.println(); 36 Serial.println("Sending email..."); 37 38 smtpData.setLogin("outlook.office365.com", 587, "outlookのアカウント名", "outlookのパスワード"); 39 smtpData.setSender("ESP32", "outlookのメールアドレス"); 40 smtpData.setPriority("Normal"); 41 smtpData.setSubject("ESP32 SMTP Mail Sending Test"); 42 smtpData.setMessage("M5StickErrorの温度計からエラーが返りました。", false); 43 smtpData.addRecipient("受信メールアドレス"); 44 smtpData.addAttachFile("/binary_file.dat"); 45 smtpData.addAttachFile("/text_file.txt"); 46 47 smtpData.setSendCallback(sendCallback); 48 49 //Start sending Email, can be set callback function to track the status 50 if (!MailClient.sendMail(smtpData)){ 51 Serial.println("Error sending Email, " + MailClient.smtpErrorReason()); 52 } 53 54 //Clear all data from Email object to free memory 55 smtpData.empty(); 56} 57 58void wifi_connect() { 59 WiFi.config("ipAddress", "gateway", "subnetmask", "DNS"); // Set fixed IP address 60 61 WiFi.mode(WIFI_STA); 62 WiFi.begin("WIFI_SSID", "WIFI_PASSWORD"); 63 64 // 接続完了するまでループ 65 while (WiFi.status() != WL_CONNECTED) { 66 delay(1000); 67 Serial.print("."); 68 WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 69 } 70 Serial.println("WifiConnect!!"); 71} 72 73void loop() 74{ 75} 76 77//Callback function to get the Email sending status 78void sendCallback(SendStatus msg) 79{ 80 //Print the current status 81 Serial.println(msg.info()); 82 83 //Do something when complete 84 if (msg.success()) 85 { 86 Serial.println("----------------"); 87 } 88} 89 90

お力添えの方、よろしくお願いいたします。

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

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

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

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

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

thkana

2020/10/15 21:42

> 固定IPアドレスを使うとエラーになる 「固定」が問題なのか、それとも与えたIPアドレスがネットワーク上正しくないのかを切り分ける必要があると思います。 自動で割り振られたものと同じIPアドレスを固定で指定したときにはどうなりますか?
poorpoor

2020/10/15 23:45

>自動で割り振られたものと同じIPアドレスを固定で指定したときにはどうなりますか? その場合は送信できることもあります。が、できないことも間々あり、不明瞭です。
thkana

2020/10/15 23:57

・接続出来なかった固定IPアドレスは、ローカルネットワークのネットマスクに含まれているものですか? ・DHCPサーバをいじれるなら、IPアドレスの発給範囲を制限してDHCPで割当の行われないIPアドレスを確保し、それを固定IPとしてESP32に与えたらどうでしょうか。
guest

回答2

0

自己解決

お騒がせしてすみません。
先ほどOutLookに通信制限がかかってしまい、仕方なくGmailに登録して使ってみたのですが、こちらだと固定アドレスで通りました。こちらで動かすことにします。

ただ、includeしているライブラリのうち、HTTPClient.hがコメントアウトされていると通信できるのですが、されていないとGmailでも通信できません。
HTTPClient.hは必須のライブラリなので消すことはできないため、今度はこちらの理由を探してみます。なので、またお力添えをお願いするかもしれません。

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

投稿2020/10/15 23:53

poorpoor

総合スコア25

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

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

thkana

2020/10/16 00:09

> こちらだと固定アドレスで通りました 「送信できることもあります。が、できないことも間々あり、不明瞭です。 」の範囲でないことを祈ります。 > HTTPClient.hは必須のライブラリなので消すことはできない 必須なのに、それを外して「通信できる」のはなにかおかしいですね。 そもそもsmtpだけならHTTPは関係ないのでは、と思えますが(確認していません) まだ見落としがあるような気はしますが...
poorpoor

2020/10/16 00:14 編集

>必須なのに、それを外して「通信できる」のはなにかおかしいですね。 すみません、『実行環境』のM5Stickで計測した温度をHTTPCLIENTを利用してデータベースに追加しており、そのため「メール機能をつけるためにHTTPCLIENTを外すことはできない」という意味でした……。
guest

0

IPアドレスはこちらで指定するものではなく、与えられているのを使用するものです。
その実行環境なるものにはどういうIPを与えられているかを調べてみれば。

投稿2020/10/15 04:17

y_waiwai

総合スコア87719

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

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

thkana

2020/10/15 21:48

DHCPにおまかせしたほうが安全だよね、という提案ならありとは思いますが。 > IPアドレスはこちらで指定するものではなく、与えられているのを使用するものです。 とまでは言えないのでは。
y_waiwai

2020/10/15 23:18

まあ、隔絶された環境で外部と通信することがない、ならそりゃ自由にアドレスつけて通信はできるでしょう。 そうでない環境で自分勝手にアドレスつけて通信できないってのは、そりゃまーそーだろーとしか言えませんわな
thkana

2020/10/15 23:44

ネットワークプロバイダーから固定IPを発給されていてそれを使うという話なら与えられているのを使用するしかないですね、確かに。 でも、普通は、ルーターの下は192.168.xx.xxとかのローカルアドレスになっていて、ある意味隔絶されているんじゃないかと思いますが如何。 その場合には、ネットマスクの範囲内で適切に選べばそれなりの自由度はあるでしょう。(これを選ぶことを「与えられている」とは言わないと思います) まぁ、質問者の状況、やろうとしていること次第ですね...
y_waiwai

2020/10/15 23:50

そういう環境なら、192.168.なんたら、というアドレスが指定されてるわけなので、それガン無視してりゃあかんでしょうという話ですわな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問