글
IT/Perl 2008. 8. 21. 13:53[ Perl ] Perl 로 메일보내기 ... SSMTP 와 MIME::Lite 를 사용해서!
Perl 로 메일을 보내려면 어떻게 해야할까요?
저도 몰라서 근처 사는 최선생님께 물어봤습니다.
"메일, 그거 삶아먹으면 되는 거 아닙니까?"
.
.
.
라는 것은 훼이크고...
Net::SMTP 라든가... CPAN 을 찾아보면 Mail 에 관련된 모듈은 널리고 널렸습니다.
전 MIME::Lite 를 사용하기 때문에... 이쪽으로만 다루겠습니다. :-)
사실 Korean Perl Workshop 참가신청을 만들 때, 메일 송신 스크립트 때문에 좀 고단했던 적이 있었습니다.
메일서버도 없고, 사용할만한 건 Gmail 인데... CPAN 에서 Gmail 에 관련된 메일 송신 모듈이 제대로 동작하지 않는 것도 문제였죠. KPW 자체적인 메일 서버도 가지고 있지 않았구요. 시간은 촉박했고...
설령 메일서버가 있다고 해도... 메이저 포털로 메일을 보낼 때 잘 안된다고 하는 그런 이슈도 있었구요.
그때 한줄기 빛이 내려왔는데,, 그것이 SSMTP 라는 것입니다.
SSMTP 가 무엇이냐는 자세한 설명은 여기에서 하지 않겠습니다. 구글해주세요.
우분투에서 간단하게 SSMTP 패키지를 설치할때는...
sudo apt-get install ssmtp
로 설치가 가능합니다.
그리고는 /etc/ssmtp/ssmtp.conf 에 아래의 설정을 넣습니다.
root=your.email@gmail.com
mailhub=smtp.gmail.com:587
useSTARTTLS=YES
AuthUser=your.email@gmail.com
AuthPass=your.password
rewriteDomain=gmail.com
FromLineOverride=YES
hostname=blah
mailhub=smtp.gmail.com:587
useSTARTTLS=YES
AuthUser=your.email@gmail.com
AuthPass=your.password
rewriteDomain=gmail.com
FromLineOverride=YES
hostname=blah
그래서 메일계정은 gmail 을 사용하기로 하고 위와같이 설정했습니다. Gmail 을 사용하면 어디든지 메일을 보낼 수 있기 때문이었죠. Gmail 을 스팸처리하는 곳은 없을 테니...
MIME::Lite 모듈이 없으면 설치해주세요.
use strict;
use warnings;
use MIME::Lite;
my $msg = MIME::Lite->new(
'Return-Path' => 'sender.email@gmail.comr',
'From' => 'sender.email@gmail.com',
'To' => 'receive@email.com',
'Subject' => 'saillinux 산 버터, 어떻게 생각하시나요?',
'Charset' => 'utf-8',
'Encoding' => '8bit',
'Data' => '사실 그거 삶아먹으면 괜찮은거 아닙니까?'
);
$msg->send;
use warnings;
use MIME::Lite;
my $msg = MIME::Lite->new(
'Return-Path' => 'sender.email@gmail.comr',
'From' => 'sender.email@gmail.com',
'To' => 'receive@email.com',
'Subject' => 'saillinux 산 버터, 어떻게 생각하시나요?',
'Charset' => 'utf-8',
'Encoding' => '8bit',
'Data' => '사실 그거 삶아먹으면 괜찮은거 아닙니까?'
);
$msg->send;
이렇게 스크립트 하나 만들어서 실행시키면...
이렇게 메일이 오게됩니다. +_+
뭐, 파라메터 넘겨서 From ,To 바꾸거나, 제목 바꾸거나... DB 에서 긁어와서 집어넣거나... 혹은 Template 를 사용해서 메일 내용을 꾸미거나... 하는 방법도 있겠죠.
여러가지 다양한 부수적인 내용은 직접 해보시면 됩니다.
현재 KPW 사이트에서는 KPW::Mail 이라는 Wrapper 모듈을 만들어 두고 사용하고 있습니다. Template 도 만들어서 Mail 내용등은 완전히 분리시켜두고 말이죠.
Daum이나 Yahoo 에서는 Subject 가 깨지는 현상도 있다고 하는데요. keedi 님께서 이에 대한 처치방법을 알려주셨네요.
use MIME::QuotedPrint qw(encode_qp);
use Encode qw(encode);
use Encode qw(encode);
필요한 모듈을 use 해서... Subject 를
...
Subject => '=?UTF8?Q?' . encode_qp(encode('utf-8', "블라블라"), '') .'?=',
...
Subject => '=?UTF8?Q?' . encode_qp(encode('utf-8', "블라블라"), '') .'?=',
...
이런식으로 감싸면 된다는 군요. keedi++
(SSMTP 는 jachin 님으로부터 줏어들어서 saillinux 님께서 설정해주셨습니다. jachin++, saillinux++)
:: 이상 IRC #perl-kr 에서 h0ney 님께서 "메일 어케날려요?" 라는 떡밥을 날리셔서 썼습니다.
:: (떡밥주도 블로그 포스팅 전략!!)
:: 2011/12/29 추기
최근 코드관련 얘기를 하는 블로그를 따로 만들어서, 위의 내용을 좀 더 보완했습니다.
http://jeen.github.com/blog/2011/12/29/perl-email-send/
'IT > Perl' 카테고리의 다른 글
[ Perl ] App::CLI 로 시작하는 커맨드라인 어플리케이션 (2) | 2008.09.01 |
---|---|
[ Perl ] Perl 로 메일보내기 ... SSMTP 와 MIME::Lite 를 사용해서! (2) | 2008.08.21 |
[ Perl ] Korean Perl Workshop 2008 : Rising Perl (2) | 2008.08.11 |
[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #5 - InflateColumn (0) | 2008.08.06 |
RECENT COMMENT