Ардуино почтовый ящик: отправляем e-mail, когда положили письмо

RoboCraft

Форум по робототехнике, электронике и программированию

  • Список форумовArduino/CraftDuinoПрограммирование
  • Изменить размер шрифта
  • Версия для печати
  • RoboCraft
  • Магазин
  • FAQ
  • Регистрация
  • Вход

Отправка Email из ардуины

Отправка Email из ардуины

Ajava » 27 дек 2013, 21:51

Всем привет! Не знаю пригодится кому или нет, но решил провести не большой ликбез по отправки почты из ардуино.
Для отправки Email понадобится Ethernet Shield – стандартные либы уже есть, и библиотека для кодирования логина и пароля в формат “Base64”. Ее можно скачать вот тут https://github.com/adamvr/arduino-base64 – там справа внизу кнопка dowland ZIP. Качаем, распаковываем, переименовываем в Base64 и кидаем в папку с библиотеками.

Вот, в принципе и все приготовления, думаю то, что шилд нужно подключить к маршрутизатору или роутеру, говорить не нужно((((

Совсем немного теории.

Вся почта из почтовых сервисов отправляется через спец. сервер smtp(smtp3). Для mail.ru это – smtp.mail.ru, для google.ru это – smtp.google.ru и т.д..
Этот сервер имеет очень не большой ряд команд на которые он отвечает. Список их я приводить не буду, кому интересно гуглите. Так вот, отправляя поочередно команды на сервер мы заставляем его отправлять сообщения. Код очень легок для понимания и расписывать по строчкам его не буду, приведу сразу листинг, там есть комменты, не запутаетесь))))))

Вот собственно код:

#include
#include SPI .h>
#include
#include
#include Ethernet .h>
#include EthernetClient .h>
#include EthernetServer .h>
#include
#include

//структура для сообщения
struct Message
<
String From; //адрес отправителя
String To; // адрес получателя
String Subject; // Тема письма
String Body; // Текст письма
>;

//mac адрес устройства (можно не менять)
byte mac[] = <
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x05 >;

//IP адрес адруины (можно не менять)
IPAddress ip(192,168,0,54);

// IP smtp сервера
IPAddress server(94, 100, 177, 1); // mail.ru
// IP других сереров можно найти в инете

// логин и пароль к почтовому сервису
char login[] = “ВашЛогин” ; //без @mail.ru
char password[] = “ВашПароль” ;

// создаем экземпляр клиента
EthernetClient client;

void setup () <
Serial . begin (9600); // UART
Ethernet . begin (mac,ip); // Запускаем шилд
Serial . println ( “Start” );
>

void loop () <
while ( Serial . available ()) <
char inSerialChar = 0;
inSerialChar = Serial . read ();
if (inSerialChar == ‘s’ ) <
SendMessage(); // При отправке в дуину ‘s’, отправляем сообщение.
>
>
>
// метод подключения к серверу
bool connectToServer() <
if (client. connected ()) <
>
else <
if (client. connect (server,25)) <
return true ;
>
else <
return false ;
>
>
>

// метод отправки сообщения
void SendMessage() <
Serial . println ( “Please wite. ” );
LogPass();
Message message = <
“ваш_почтовый_ящик@mail.ru” ,
“почтовый_ящик_получателя@gmail.com” ,
“Проба пера” , //тема
“Огромный привет от Ардуино. ” >; //само сообщение
client. println ( “MAIL From: +message.From+ “>” );
delay (250);
client. println ( “RCPT To: +message.To+ “>” );
delay (250);
client. println ( “DATA” );
delay (250);
client. println ( “From:” +message.From);
client. println ( “To:” +message.To);
client. println ( “Subject:” +message.Subject);
delay (250);
client. println (message.Body);
delay (250);
client. println ( “.” ); // по приходу точки сервер ставит сообщение в очередь
delay (250); // на отправку
client. println ( “QUIT” ); // как только закрыли соединение, сообщение улетает
delay (250);
Serial . println ( “Message sending. ” );
>

// подключение к сереверу и авторизация
void LogPass() <
char array[64]; // массив для кодирования
if (connectToServer()) <
client. println (F( “helo 1.2.3.4” ));
delay (250);
client. println (F( “AUTH LOGIN” ));
delay (250);
client. println (strToBase64(login));
delay (250);
client. println (strToBase64(password));
delay (250);

>
else <
Serial . println ( “Server not connected. ” );
>

// кодировка Base64
String strToBase64( char str[]) <
char charArray[64];
base64_encode (charArray,str,strlen(str));
String result = charArray;
return result;
>

Код полностью рабочий, так что если что то не задалось, курите код.

Arduino.ru

Опять отправка почты с Arduino

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Встала проблема отправки почты с Arduino

Нашел пример от 13 года

Говорит что соединение с сервером есть

Хаб подтверждает соединение

Письмо до адресата не доходит

Для отправки использую smtp.bk.ru

Уважаемые форумчане прошу помочь советом, что не так

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

у Вас на bk.ru есть учётная запись?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

а отправляете какому серверу? как правило логин должен быть полный если сервер обрабатывает более одного доменного имени, то-есть как сервер определит адресата вы к примеру arduino@mail.ru, asrduino@bk.ru и т.д., зайдите на сайт почтового сервиса и посмотрите документацию по настройке SMTP

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Пытался логин вводить полностью XXXX@bk.ru, не помогло

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Надо писать ответы сервера в лог, сек гляну, что у меня пор почте, если есть возможность дам тестовую учётку
кстати у вас – client.println((“EHLO bk.ru”)); )))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Толком не понял что это, написал как было в примере client.println((“EHLO mail.ru”));

Скорее всего Hello

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

дайте вашу почту, пришлю тестовый аккаунт

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ткните носом, какую полезную информацию я могу подчерпнуть из Вашего письма

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

чтобы получить полезную информацию надо будет посмотреть лог сервера. ЧТО ЕМУ НЕ НРАВИТСЯ
в мониторе ком порта у вас всё замечательно?
Если да, значит что-то на стороне сервера

Экстрасенсов тут нет )))

работать должно, только там порт smtp 465 а у вас 25

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

чтобы получить полезную информацию надо будет посмотреть лог сервера. ЧТО ЕМУ НЕ НРАВИТСЯ

работать должно, только там порт smtp 465 а у вас 25

Работать должно ? Сомневаюсь. Серверу не нравится отсутствие SSL-соединения, а с этим у Ардуино бооольшие проблемы.

Почитайте давнее обсуждение этой проблемы, насколько я знаю, с тех пор мало что изменилось.

P.S. Про команду “EHLO” информацию несложно найти, кстати.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

таки и предложил товарищу аккаунт без ssl, на мне железо, так что имею общее представление – не больше, по команде глянул, ну нельзя же так, ощущаешь себя ископаемым динозавром )))
ну да ладно!
А через bk.ru выходит никак )))
Аккаунт удалил

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Оно и немудрено – протоколу SMTP уже 34 года )))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

))) а вообще для этих целей есть другие железки, надо оставить ардуине то, что она умеет делать хорошо, а сеть оставить линуксу (ORANGE PI)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

либо пользовать сервис temboo. уже года полтора с его помощью из ардуины отправляю емейлы,твиты. это пока единственное простое решение которое заработало.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

1. Вы ответы почтового сервера “видите”, или пишете в “пустоту”?
2. Всю кириллицу в теле письма надо перекодировать в Base64
3. Авторизации в Base64
4. Если UART занят, используйте програмный UART (только на передачу) для отладочных сообщений, или отладьте программу на компе.

У меня был старый проэкт, но там код на машине состояния был. Восстановил алгоритм.

PS: Раньше mail.ru bk.ru yandex.ru ramler.ru по 25 порту работали. Сейчас загнивают и не работают. Да и регистрацию вроде закрыли без телефона.
Используйте заграничные серверы, например openmailbox.org.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Работает с яндекса на яндекс:

#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include
#include
#include
#include
#include

//структура для сообщения
struct Message
<
String From;//адрес отправителя
String To;// адрес получателя
String Subject;// Тема письма
String Body;// Текст письма
>;

//mac адрес устройства (можно не менять)
byte mac[] = <
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x05 >;

//IP адрес адруины (можно не менять)
IPAddress ip(192,168,1,48);

// IP smtp сервера
IPAddress server(87,250,251,50);
// IP других сереров можно найти в инете

// логин и пароль к почтовому сервису
char login[] = “A. @yandex.ru”;//
char password[] = “A. “;

// создаем экземпляр клиента
EthernetClient client;

void setup() <
Serial.begin(9600);// UART
Ethernet.begin(mac,ip);// Запускаем шилд
Serial.println(“Start”);
>

void loop() <
while(Serial.available()) <
char inSerialChar = 0;
inSerialChar = Serial.read();
if(inSerialChar == ‘s’) <
SendMessage();// При отправке в дуину ‘s’, отправляем сообщение.
>
>
>
// метод подключения к серверу
bool connectToServer() <
if(client.connected()) <
>
else <
if(client.connect(server,25)) <
return true;
>
else <
return false;
>
>
>

// метод отправки сообщения
void SendMessage() <
Serial.println(“Please wite…”);
LogPass();
Message message = <
“A. @yandex.ru”,
“B. @yandex.ru”,
“Проба пера”,//тема
“Огромный привет от Ардуино. ” >;//само сообщение
client.println(“MAIL From: “);
delay(250);
client.println(“RCPT To: “);
delay(250);
client.println(“DATA”);
delay(250);
client.println(“From:”+message.From);
client.println(“To:”+message.To);
client.println(“Subject:”+message.Subject);
delay(250);
client.println(message.Body);
delay(250);
client.println(“.”);// по приходу точки сервер ставит сообщение в очередь
delay(250); // на отправку
client.println(“QUIT”);// как только закрыли соединение, сообщение улетает
delay(250);
Serial.println(“Message sending…”);
>

// подключение к сереверу и авторизация
void LogPass() <
char array[64];// массив для кодирования
if(connectToServer()) <
client.println(F(“helo 1.2.3.4”));
delay(250);
client.println(F(“AUTH LOGIN”));
delay(250);
client.println(strToBase64(login));
delay(250);
client.println(strToBase64(password));
delay(250);

>
else <
Serial.println(“Server not connected…”);
>

// кодировка Base64
String strToBase64(char str[]) <
char charArray[64];
base64_encode(charArray,str,strlen(str));
String result = charArray;
return result;
>

Умный физический почтовый ящик, который отправляет e-mail

Продолжаем тему Умного дома и сегодня у нас очередной интересный проект – реальный физический почтовый ящик будущего, который отправляет электронное письмо хозяину, если в него что-то положили. За этот проект мы благодарим Андреа Флориана. Начнем с того, что посмотрим как это работает:

Почтовый ящик – старый метод доставки информации из одного места в другое. В прошлом все использовали данный метод связи и все очень сильно зависели от него. Но сегодня это считается скучным и неэффективным методом доставки данных. Гораздо проще и интереснее использовать цифровое устройство, и с изобретением электронной почты почтовый ящик медленно начал ржаветь.

Данный проект стремится вернуть профессионализм в получении физической почты. Всем известно, что неприятно ждать получения письма или извещения о посылке от Алиэкспресс. Каждый день выходя из дома, надеясь, что ваше важное долгожданное извещение пришло. Наше простое устройство отправляет вам электронное письмо при получении почты, поэтому вы всегда знаете, есть ли смысл открывать почтовый ящик.

Шаг 1. Функциональность

Устройство предназначено для всех, его очень просто сделать и оживить свой старый почтовый ящик. Устройство использует Sigfox для связи с облаком и отправки пользователю электронной почты, если почта обнаружена в реальном ящике. У Arduino MKR 1200 Fox есть лазер, направленный на фоторезистор, они помещаются на дне почтового ящика, а когда почту кладут в ящик, микроконтроллер обнаруживает письмо и уведомляет Sigfox, который, в свою очередь, отправляет пользователю e-mai. Ниже приведена схема функциональности проекта.

Ниже приведено изображение обзора кода проекта, описанного на следующих шагах. Но давайте остановимся немного на этом сейчас.

Read Light Intensity считывает исходное значение фоторезистора и сохраняет его в переменной, лазер будет непрерывно проектировать луч света на фоторезистор.

Условие if проверяет, находится ли значение фоторезистора ниже нормального значения, фоторезистор будет выводить в среднем 950 на аналоговый вывод, если значение ниже более чем на 50, это означает, что есть что-то, блокирующее свет и это вызывает функцию внутри цикла.

Notify Sigfox отправит постоянный байт в Sigfox, Sigfox затем отправит пользователю электронное письмо при получении сообщения.

Устройство отправляет символ пробела в Sigfox «», когда оно обнаруживает почту, поскольку данные не должны отправляться на сервер, электронное письмо будет просто информировать пользователя о том, что в ящике есть почта. Ниже фото того как работает процесс:

Пользователь, работающий с этим проектом, получает следующие плюсы:

  • Уведомление при получении почты;
  • Не тратит время и энергию на проверку почты каждый день;
  • Устройство, которым просто пользоваться, так как устройство работает постоянно и может обрабатывать несколько писем.

Шаг 2. Комплектующие

Этот проект требует небольшого количества электроники, список необходимых устройств приведен ниже.

Деталь Кол-во
1 Arduino MKR 1200 Fox 1
2 Лазерный модуль 1
3 Резистор (1 кОм) 1
4 Фоторезистор 1
5 2x батарейный блок AAA / AA 1
6 AAA / AA батареи 1
7 Провода для перемычек 1

Шаг 3. Схема соединения

Ниже представлена схема проекта, в проекте нет макетной платы, поэтому схемы немного перепутаны, поэтапное руководство по подготовке MKR Fox также ниже.

Шаг 4. Готовим MKR fox

Изображения, приведенные ниже, помогут вам подключить батарейный отсек и антенну к MKR Fox, обратите внимание на то, что батарейный отсек должен быть подключен после подключения лазера и фоторезиста. Другая проводка и настройка находятся при построении проекта / Финала.

Arduino MKR Fox автоматически регулирует источник питания, поэтому, когда он подключен для программирования, Arduino автоматически переключится на питание USB и вернется к батарее, когда отключится от компьютера.

Шаг 5. Код для почтового ящика

Сначала приведем код для нашего почтового ящика, который вы сможете скопировать или скачать. Также ниже будут некоторые объяснения кода.

В коде проекта есть две основные функции:

  • Чтение и анализ света;
  • Отправка пакета.

Эти блоки объясняются ниже.

Чтение и анализ света

В первой строке блока считывается световое значение фоторезистора, которое подключено к контакту A1, если значение меньше 800, и если значение упало и не было ранее ниже 800, оно будет запускать функцию отправки пакета Send Packet .

Если значение превышает 800, Arduino сбрасывает переменную pos (которая уведомляет, если предыдущее значение было ниже 800), если предыдущее значение было меньше 800 (указывает наличие письма), Arduino будет ждать, пока письмо не будет удалено.

Отправка пакета

Этот раздел кода отправит пакет Sigfox, если обнаружена почта, Arduino запустит процедуру синтаксического анализа и напечатает ” ” для Sigfox, и будет ждать подтверждения того, что Sigfox получил сообщение, а также будет ждать, пока письмо будет удалено из ящика. Затем снова запустит алгоритм.

Шаг 6. Настройка SigFox

Этот урок разработан с условием, что пользователь уже настроил свое устройство и подключил его к Sigfox, если вы не настроили MKR Fox, то вам придется подождать ближайшей публикации на эту тему на нашем сайте. Посмотрите изображения ниже, которые помогут вам настроить обратный вызов Sigfox.

  • Установите тип Data Uplink
  • Установите канал для E-mail
  • Нет необходимости заполнять Custom Payload Configuration
  • Установите Recipient (получателя), адрес электронной почты
  • Установите Объект SmartPostBox или предпочитаемый Объект
  • Вы можете вставить все, что пожелаете в поле Message (сообщение) – это тело письма

Привет,
Это твой почтовый ящик на связи. Просто хотел сказать что ты получил почту.
Обязательно проверь.
Твой <устройство>,
Конец связи.

Ключевое слово – это переменная, представляющая идентификатор устройства, это встроенная переменная, есть еще много таких, например , ,

Настройка переменных

Существует одна переменная, которую пользователь должен установить, proDebug, если она включена, Arduino требует подключения через USB к компьютеру, и Serial Monitor должен быть открыт, Arduino выводит на Serial Monitor в этом режиме, он идеален для устранения неполадок.

Библиотеки

  • Sigfox – copyright (c) 2016 Arduino LLC GNU Lesser General Public License Эта библиотека находится в свободном доступе
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License Эта библиотека находится в свободном доступе

Шаг 7. Собираем корпус

Для проекта требуется некая оболочка, так как конверт или извещение должны падать между лазером и фоторезистором. Здесь нет определенных рекомендаций при создании корпуса, т.к. все почтовые ящики отличаются по высоте, глубине и ширине.

Но можно поступить следующим образом – см. фото ниже.

Как только корпус будет завершен, попробуйте выполнить проект с помощью proDebug и подключитесь к компьютеру, как только он будет работать, поместите его в почтовый ящик, и все готово!

Заключение

Последний шаг – подключить Arduino к ПК/Mac и загрузить эскиз (который мы приводили выше). Убедитесь, что батарейный отсек подключен к Arduino и схема собрана правильно. Затем вы можете всё соединить и поместить в почтовый ящик.

Как-то нам пришлось ждать много писем и извещений, т.к. заказали много деталей для Ардуино. И нам надоело вставать утром и проверять почтовый ящик постоянно на предмет новой почты. Когда мы реализовали данный проект вместо того, чтобы постоянно проверять пустой почтовый ящик, мы стали получать уведомление о том, что пора забирать письмо.

Уведомление о непрочитанном входящем письме с помощью Arduino

Совсем недавно заинтересовался платформой Arduino. После того, как плата Arduino Mega 2560 была получена в подарок на Новый Год я, как приличный начинающий любитель робототехники, поморгал диодом, в том числе через кнопочку (которые, кстати, были выпаяны со старой разобранной мышки для компьютера).

Вот после таких стандартных экспериментов я решил, что надо сделать что-то полезное. Вдохновился различными видео с youtube, в которых показывали, как с помощью Arduino + Python было реализовано физическое уведомление (у кого-то лампочка мигала, у кого-то флажок поднимался) о получении новой почты на ящик gmail.

В данной статье хочу рассказать о своем опыте создания такой «уведомлялки». Из «железа» необходимо совсем мало, вот то, что использовал я:

— Плата Arduino Mega 2560 – 1 шт.
— USB-кабель для поключения Arduino к компьютеру – 1 шт.
— Светодиод – 1 шт.

Программную часть я реализовал на C#. Программа, запущенная на компьютере, занимается следующим:

По таймеру, каждые 10 секунд проверяется состояние почтового ящика, если есть непрочитанные письма – то по COM-порту передается значение «1», если новых писем нет, то передается значение «2». Для общения программы на C# с Arduino используется компонент SerialPort, который является стандартным элементом Toolbox-а в проекте C# Windows Forms в Visual Studio 2010. Там же можно найти и таймер.

Для соединения с почтовым ящиком gmail и поиска непрочитанных писем используется Mail.dll, которую можно найти на www.lesnikowski.com (я бы не назвал это рекламой, скорее — копирайт, а автору отдельное спасибо). DLL-ка отлично документирована, поэтому на этом моменте останавливаться подробно не будем. Лучше рассмотрим код, который «читает письма»:

По приведенному коду предвкушая вопросы сразу отвечу на некоторые из них. Да, можно было открывать порт и подключаться к серверу один раз, а не по таймеру, каждые 10 секунд. Да я пользуюсь чужими dll-ками в этом проекте, а не пишу свои классы. Причина тому – на данном этапе целью было создать не идеальный код на С# и не описать как на C# проверить почту, а заставить уведомлялку о новых письмах работать, с чем этот код успешно справляется.

Что же происходит в Arduino, когда на него приходят по COM-порту цифры «1» или «2»? А в нем происходит следующее:

Т.е. на Arduino записана довольно-таки простая программа, которая практически и занимается «физическим уведомлением» — в моем случае при появлении в ящике непрочитанных писем зажигается светодиод. Если же пользователь зашел в свой ящик и прочитал письмо – в течение ближайших 10и секунд срабатывания таймера диод выключится, что оповестит об отсутствии непрочитанных писем.

В качестве примера приведу один из многих роликов, которые вдохновили меня на создание своей собственной «уведомлялки»:

Вот так началось мое освоение Arduino. Надеюсь, данный проект когда-то найдет свое практическое применение и не только в моих руках.

Источники:

http://arduino.ru/forum/programmirovanie/opyat-otpravka-pochty-s-arduino

http://arduinoplus.ru/arduino-pochtovyi-yaschik/

http://habr.com/post/137179/

http://arduinomaster.ru/platy-arduino/arduino-pro-mini-raspinovka-i-podklyuchenie/

Ссылка на основную публикацию