대충 코드를 내 스타일로 편집해서 내꺼처럼 올릴 수 있었지만 깔끔하게 잘 표현되어서 어떤 로그님의 블로그의 소스를 사용했습니다. 외국 분들꺼 소스도 사용하여 돌렸지만 이 코드 방식이 보기 편해서 사용하게 됐네요.
# -*- coding: utf-8 -*-
import subprocess
def sendAutostartMail():
import smtplib
import string
USER = '구글계정'
PASS = '패스워드'
TO = '수신이메일계정'
SUBJECT = '[RPi3] Autostart Mail'
ip = subprocess.check_output("hostname -I", shell = True)
TEXT = 'Autostart 메일입니다.\nRPi3의 IP 주소는 다음과 같습니다.\n%s' %ip
print TEXT
FROM = USER
HOST = 'smtp.gmail.com:587'
BODY = string.join((
'From: %s' %FROM,
'To: %s' %TO,
'Subject: %s' %SUBJECT ,
'\r\n',
TEXT,
), '\r\n')
server = smtplib.SMTP(HOST)
server.starttls()
server.login(USER, PASS)
server.sendmail(FROM, TO, BODY)
server.quit()
print '%s에게 메일을 발송하였습니다.' %TO
if __name__ == "__main__":
sendAutostartMail()
[1 단계] : 파이썬 프로그램을 실행 후 위 새로만들기 하여 위 코드를 삽입 후 원하는 이름으로 저장한다. 경로는 파이썬 초기 위치(/home/pi)에 그냥 저장하면 된다.
[2 단계] : 다음 부팅 때 해당 작업을 수행하도록 하기 위해서 rc.local 파일을 수정해야 한다.
nano 편집기 이용
$ sudo nano /etc/rc.local
nano 편집기로 해당 rc.local 파일을 열고 마지막 하단에 한줄만 삽입만 하면 끝!
python /home/pi/startmail.py
[3 단계] : 부팅 전 테스트
$ python /home/pi/startmail.py => 파이썬 실행해서 이메일이 정상적으로 오는지 확인
$ /etc/rc.local => 부팅 때 이 파일이 실행되는데 바로 실행시켜서 정상적으로 오는지 확인
두 과정이 정상적으로 왔다면 재부팅 한다.
첫번째, 구글 Gmail 로그인 및 보안에 걸리기 때문에 Gmail를 사용할 수 없다. 내 계정에서 계정 엑세스 권한을 부여 해 줘야한다. 주의할 것은 구글 계정을 여러개 만들 수 있기 때문에 본인이 실제 사용하는 계정으로 하면 해킹의 위험이 있으니 새롭게 라즈베리용 계정을 만들어 사용하면 된다. 계정을 만들었으면 내계정에 들어가서 로그인 및 보안에서 아래 그림에서 보는 것 처럼 변경해주면 된다.
두번째, rc.local이 부팅 때 수행되는데 중요한것은 네트워크가 안잡힌 상태에서 수행하게 되면 사실 gmail에 접속할 수 없고 자동적으로 이메일은 오지 않습니다.
그래서 네트워크가 잡힐 시간적 여유를 줘야 한다. 저 또한 이것 때문에 장시간 삽질을 했습니다.
실제 mail로 IP 전송 명령을 수행하지만 인터넷이 안잡혀 있으면 사실상 헛발질 하는 거랑 같게 됩니다.
네트워크쪽에서 차라리 잡히고 나서 수행되도록 하는 방법도 있지만 잘 모르기 때문에 그부분은 안하고 rc.local에서 sleep 명령어로 명령을 내리기전 대기 시간을 줬습니다.
대기 시간이 길면 부팅이 길어지지만 안정적으로 이메일이 도착했습니다.
하지만 대기시간이 짧으면 이메일이 왔다 안왔다 하는게 문제점이더군요.
sleep 10
python /home/pi/startmail.py
대충 sleep함수로 해결 됐네요.
결론은 네트워크쪽 파일에다가 명령을 심어놓으면 네트워크가 잡힌 후 명령을 수행하기 때문에 그게 맞겠죠. 하지만 잘 안되서 포기했네요.
어제 악몽이였습니다. 몇가지 추가할게 있어서 자동으로 주변 Wifi를 잡아서 현재의 ip를 이메일로 전송시켜서 편하게 원격 접속하고 싶었는데 이것 저것 코딩하면서 네트워크쪽 만지다가 재부팅 한 순간 무한 로딩에 빠지고 접속이 안되어 지금까지 Raspberrypi3에 설치한 프로그램은 둘째치고 처음부터 SD카드 다시 포맷해야 한다는게 악몽이였네요. SD카드 포맷 후 다시 이미지 파일을 굽고 데스크톱 모니터와 마우스 선을 연결해서 처음부터 다시 OS설치와 환경 설정과 기타 프로그램 재설치 등 잠잘 시간에 삽질하게 되었네요.
담부터 확실히 정리된 뒤에 접근해야지 대충 되겠다 싶어 시스템을 막 건들면 안되겠더군요.
아 OS 벌써 몇번째 반복해서 재설치하는지 노가다 삽질했네요.