저는 웹 기반 Arduino를 사용하여 집 주변의 물건을 감지하려고 합니다. 예를 들어 건조기가 완료되면 문자 메시지를 보내길 원합니다. 따라서 Arduino가 SMTP 명령을 사용하여 통신할 수 있는(암호화되지 않은) Linux 시스템에 로컬 메일 서버를 두는 것이 유용합니다. 서버는 Arduino에서 생성된 메시지를 다음으로 전달합니다.[이메일 보호됨], 결국 문자 메시지를 받게 되었습니다. 이메일을 수신하기 위해 이 서버를 사용할 필요가 없으며 Arduino가 로컬 네트워크 외부에서 통신하는 것을 원하지 않습니다.
도메인 이름 없이 이러한 메일 전달자를 설정할 수 있습니까?
답변1
Arduinos는 외부 세계에 이메일을 보낼 수 있습니다(직접) 인터넷 없음사용권.
이렇게 하려면 다음이 필요합니다.
- 인터넷 접속이 가능한 상자에서 포트 25에 postfix와 같은 이메일 릴레이를 설정하고 내부 네트워크 또는 Arduino 네트워크가 별도의 LAN/VLAN인 경우 승인하십시오.
- API는 Arduino에서 이메일을 보내는 코드에 사용되며, 이러한 이메일은 sendmail API 대신 포트 25를 사용하여 TCP를 통한 통신을 기반으로 합니다. IP를 통해 릴레이/프록시 시스템을 SMTP 릴레이로 지정합니다. (
smtplib
예를 들어python
SMTP 주소가 제공된 경우) - FROM 주소를 외부에 존재하는 도메인의 주소로 지정하거나, 드물지만 대화 중인 서버에 따라 기존 이메일을 사용하십시오. 그렇지 않으면 스팸 방지 조치로 인해 이메일이 삭제됩니다. (이것이 중요합니다. 저는 이 때문에 종종 개발자로부터 티켓을 받습니다.) 이메일의 도메인 이름이 본인의 것이 아니어도 되지만, 그럴 경우 스팸 포인트가 줄어듭니다.
나중에 더 강력한 다른 Linux 시스템(예: Raspberry Pi 또는 클론)을 설정해야 하는 경우 ssmtp
더 효율적인 sendmail API를 사용하여 이메일을 전달할 수 있는 것도 좋고 매우 가벼운 서비스입니다.인터넷에 직접 접속할 수 없는 상자에서(이것이 제가 사용하고 있는 것입니다).
실제로 어려운 부분은 인터넷 연결 없이 이메일을 보내는 Arduino를 다루는 것이 아닙니다. 이는 SMTP 서버 및/또는 홈 ISP에서 시행할 수 있는 스팸 방지 및 보안 조치 때문입니다. 예를 들어, 세계 일부 지역에서는 ISP가 가정 고객을 위해 포트 25/TCP(SMTP)를 차단하는 경우가 많습니다. 그렇다면 또 다른 보충 질문을 드리는 것이 좋습니다.
답변2
작은 "에이전트" 스크립트를 작성합니다.
예를 들어 무언가를 실행하거나 netcat
Arduino socat
가 연결된 내부 네트워크 인터페이스에서 수신 대기하는 포트를 사용합니다. socat
그런 다음 배치 메일 클라이언트를 사용하여 arduino에서 수신된 모든 "전보"에 대해 mms.att.net을 통해 메일을 보내는 쉘 스크립트 등으로 공급됩니다.
아무것도 반환할 필요가 없다면 다음과 같이 간단할 수 있습니다.
nc -k -l 8888 | while read sender telegram ; do echo $sender sent: $telegram ; done
그런 다음 통화를 echo
비슷한 것으로 바꾸십시오 mail -s $sender $telegram <other_options>
. 원하거나 필요한 경우 "오류 처리"를 추가하십시오.
Arduino에서 SMTP 명령을 사용하여 전송해야 하는 경우(TCP 연결을 통한 원시 텍스트 대신) 예를 들어 expect
Arduino 전송 후 MAIL FROM: ....
RCPT TO: ....
올바른 응답을 위해 무언가를 구성해야 합니다.