@gypark - gypark.pe.kr의 주인장. 홈페이지에 Perl에 대해 정리해두는 취미가 있고, Raymundo라는 닉을 사용하기도 한다.
프로그램을 써서 자동으로 메일이 발송되게 하고 싶은데, 직접 메일 서버를 설치하자니 설치나 설정도 어렵고, 최근에는 스팸 때문에 인증되지 않은 서버에서 발송된 메일은 아예 배달이 거부되는 경우도 있습니다. 간편하게 내가 가입한 Gmail 계정을 사용하여 메일을 발송하는 법을 알아봅시다.
필요한 모듈은 다음과 같습니다.
직접 CPAN을 이용해서 설치한다면 다음 명령을 이용해서 모듈을 설치합니다.
$ sudo cpan Email::Send::SMTP::Gmail
사용자 계정으로 모듈을 설치하는 방법을 정확하게 알고 있거나 perlbrew를 이용해서 자신만의 Perl을 사용하고 있다면 다음 명령을 이용해서 모듈을 설치합니다.
$ cpan Email::Send::SMTP::Gmail
먼저 Email::Send::SMTP::Gmail
클래스의 객체를 만들면서 인증 정보를 넣습니다.
use Email::Send::SMTP::Gmail; my ( $mail, $error_msg ) = Email::Send::SMTP::Gmail->new( -smtp => 'smtp.gmail.com', -login => '내gmail주소', -pass => '내gmail암호', ); if ( $mail == -1 ) { print "error: $error_msg"; exit; }
new()
메소드는 인증에 성공하면 세션 정보가 담긴 객체를 반환합니다.
실패할 경우는 (-1, 에러메시지)
형태의 리스트를 반환합니다.
따라서 $mail
변수의 값이 -1
인지 확인하면 에러가 발생했는지 알 수 있으며,
에러가 발생했을 때 구체적인 에러메시지는 $error_msg
변수를 확인하면 됩니다.
만일 구글 계정 설정에서 "2단계 인증"을 사용하도록 한 경우라면, 그냥 아이디와 비밀번호를 넣어서 로그인할 수 없습니다. 웹으로 로그인할 때라면 휴대폰으로 전송된 인증번호를 다시 넣도록 되어 있는데, 우리가 만든 스크립트는 그런 기능이 없습니다. 이런 경우는 "앱 비밀번호"란 것을 생성하여 사용합니다. 앱 비밀번호를 사용하는 절차는 다음과 같습니다.
내gmail암호
자리에 넣습니다.메일을 보내는 코드도 아주 간단합니다.
my ( $result, $err_msg ) = $mail->send( -to => '수신자메일주소', -subject => '메일 제목', -body => '메일 본문 텍스트', # 첨부 파일이 있는 경우 -attachments=> '/home/gypark/doc.txt,/home/gypark/music.mp3', );
몇가지 유의할 점은 다음과 같습니다.
-cc
, -bcc
키로 지정할 수 있습니다만, 이 때도 -to
는 필수라서 비워둘 수는 없습니다.send()
는 성공하면 1
을 반환하며,
실패할 경우는 new()
와 마찬가지로 (-1, 에러메시지)
리스트를 반환합니다.*.exe
같은 실행 파일은 첨부할 수 없습니다. 심지어 압축을 해도 안 됩니다.
보낼 수 없는 파일의 형식에 대해서는 구글의 도움말을 참조하세요.그리고 new()
와 send()
모두 자체적으로 에러 처리를 하고는 있지만,
실제 사용해보면 의존성이 걸린 모듈 쪽에서 에러가 날 때 그냥 die
해 버리는 경우를 볼 수 있었습니다.
따라서 이런 경우에 스크립트가 죽지 않게 하려면, eval
블록으로 둘러싸거나
별도의 예외 처리 모듈을 사용하면 프로그램을 보다 견고하게 만들 수 있습니다.
Perl과 CPAN의 Email::Send::SMTP::Gmail 모듈을 이용해 Gmail 계정을 통하여 메일을 전송하는 법을 살펴보았습니다. 시스템을 모니터링 중 문제가 생겼을 때 또는 IRC등의 대화방에서 자신의 아이디가 언급 되었을때 메일로 알려준다거나 등의 방법으로 얼마든지 응용이 가능하겠죠? :)
X-mas tree
& Llama
ASCII Art by ASCII Art Farts.
Computer ASCII Art by Chris.com.
Font ASCII Art by ASCII Art Farts.
Text ASCII Art by patorjk.com.
Artwork by
Inkyung Park
& Keedi Kim.
Designed by
Hojung Youn
& Keedi Kim.
Articles by
Seoul Perl Mongers.
Edited by
Keedi Kim.
Hosting sponsored by
SILEX.
Sponsored by
SILEX.
.-''' __ __ / \/ \/ \ =-_- | \. -____- / \ // /|| '' //| //|| == = == ==