2009������02·���19������
xaicron's send-gmail-simple at master - GitHub
\������¼\��������������ď�� - \���\���\��я�����Perl�����Џ����� - \���\���\��я�����Perl�����Џ�����
�����ҏ��«���������̏�����Email::Send::Gmail������»���������������Gmail���«������\������¼\����������ď��·�����������Ï��������·�����������Ώ����ď��ޏ�������¡����������я��«�����������Ï��������«���������������«�����������ď�¡�
- CC���̏����������������������
- Bcc���̏����������������������
- �����돪����\���\���\���\������̏����������я��������������µ������
- �����돪����\���\���\���\�������������������ď�����»�ߏ����������ď�����²��؏�����������������
²¼µ�����Ώ����ď�����������\³���¼\���������½��Џ����������������Ώ����ď��ޏ�����CC�����Џ���������������������Error sending email: Email::Send::Gmail: no valid recipients��¡ߏ��������«��¡�
CC�����Џ��������������«�����������ď�������¡��돪����\���\���\���\�����������������������«������������¾���¹��������������������������я��������������ޏ�������¡�
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use Email::Send; use Email::Send::Gmail; use Email::MIME; use Email::MIME::Creator; use File::Slurp qw/slurp/; my $jis = find_encoding 'ISO-2022-JP'; my $from = '[email protected]'; my $to = '[email protected]', my $cc = '[email protected]'; my $email = Email::MIME->create( header => [ From => $from, To => $to, CC => $cc, # ���³�����������Џ�����������������\��\������¼ Subject => encode('MIME-Header-ISO_2022_JP', 'Perl���«������Gmail������\������¼\����������ď��'), ], parts => [ $jis->encode('���µµ������������������������������������«���¼����'), # ���������·���������³�����������������������������я���������������������������������돪����\���\���\���\��� Email::MIME->create( attributes => { filename => '../temp.jpg', content_type => 'application/octet-stream', encoding => 'Base64', name => $jis->encode('��������������������������𡯏�����������.jpg'), }, body => slurp('../temp.jpg'), ), ], ); my $sender = Email::Send->new({ mailer => 'Gmail', mailer_args => [ username => $from, password => 'password', ], }); eval { $sender->send($email) }; die "Error sending email: $@" if $@;
������������������ �����²���²���²_ �������������������ď����� ���� ������ ������������ �����ď����¡������ ���� ������� �������������ď��������¡�����¡�������� ����������\���\���\�������»����������������������«������������ ������������|���� ������ ���� ,���(���_, )���³���� ���� | ������ ������ ���������� ������ ������������²���� �����ď������� ������ ���� ���� ���ď�������_�����³\������,���� ������
\Ð\«���������«���������������ޏ�����»�����𡯏��½�����Ï�����\���\���\������¼\���½��Џ�����
Net::SMTP::SSL������MIME::Entity���������·���³���·���³½��Џ�����������·���²�����¡����������я��«��������������ď�¡�
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use Email::Gmail::Send; my $jis = find_encoding 'ISO-2022-JP'; my $username = '[email protected]'; my $gmail = Email::Gmail::Send->new( username => $username, password => 'XXXXXX', # Debug => 1, ); $gmail->send( From => $username, TO => '[email protected]', CC => ['[email protected]', '[email protected]'], BCC => ['[email protected]', '[email protected]'], Subject => encode('MIME-Header-ISO_2022_JP', 'Gmail�����������돪����\���\���\���\����������ď��\���\¹\���'), Body => $jis->encode('�����������������я����������돪����\���\���\���\������̏�������������������«���������Ï��Ï��Ï���' ), Parts => [ { Path => '../temp.csv', Name => $jis->encode('���·�����������䏢����.csv') }, { Path => '../temp.jpg' }, ], ) or die $gmail->errstr;
����������������𡯏�����\��\·\��\·���������я��·������������������������������¡�
- \���\���\������¼\������¾���̏����ҏ�����������
- TO��¡�CC��¡�BCC�����������ď�ԏ�����\��\���\���\¹»������������������������
- Parts�������������³�����������������돪����\���\���\���\���������½��Џ�����
- \���\���\���\������¾������¾�����¢̏��·�����ď�����������������basename���¹����������������
- �����������������������䏪���䏢������·�����Ï�����������������¼�������쏢����encode���·������»���������
- \���\���\������¼\������¾���̏����ҏ�����������
�돫��������������돪؏��������̏���������������¡�Net::SMTP����������������Authen::SASL������eval���·�����������������я�������������¡����������я��«������������¹��Џ�����������������������������\��\������¼���������«�����돢����»������������������¹��¡�
Authen::SASL����\���\���\¹\������¼\������µ���������������������Ð������µ�����¡�
���³���������Module�����ӏ�����������������������¹��¡��������������������Ï���������������¼�����������ď���������������CodeRepos���«GitHub���·����������
Email::Gmail::Send
�����ď����ӏ����я�����������������������������\���\���\������¼\��������������������Џ�������������
package Email::Gmail::Send; use strict; use warnings; use utf8; use Carp qw/croak/; use Net::SMTP::SSL; use MIME::Entity; use Email::Date::Format; use File::Basename qw/basename/; our $VERSION = '0.01'; sub new { my $class = shift; my $die_msg = "Usage: $class->new(username => \$username, password => \$password)"; my %args = @_; croak $die_msg unless $args{username}; croak $die_msg unless $args{password}; bless {%args}, $class; } sub send { my $self = shift; my $die_msg = "Usage: $self->send(From => \$from, TO => \$to, Subject => \$subject, Body => \$body)"; my %args = @_; croak $die_msg unless $args{From}; croak $die_msg unless $args{TO}; croak $die_msg unless $args{Subject}; croak $die_msg unless $args{Body}; $args{Data} = $args{Body}; delete $args{Body}; my $mime = MIME::Entity->build( Date => Email::Date::Format::email_date, Type => 'text/plain; charset="ISO-2022-JP"', Encoding => '7bit', %args, ); if ($args{Parts}) { for my $hash (@{$args{Parts}}) { croak "Usage: $self->send(Parts => [ {Path => \$file_path, Name => \$file_name}, { ... } ])" unless $hash->{Path}; $mime->attach( Path => $hash->{Path}, Filename => $hash->{Name} || basename($hash->{Path}), Type => 'application/octet-stream', Encoding => 'Base64', ) } } my $smtp = Net::SMTP::SSL->new( 'smtp.gmail.com', Port => 465, Debug => $self->{Debug} || 0, Timeout => $self->{Timeout} || 15, ) or die "Net::SMTP::SSL->new failed!!"; if ($smtp->auth($self->{username}, $self->{password})) { $smtp->mail($args{FROM}); $smtp->to(&_deref($args{TO})); $smtp->cc(&_deref($args{CC})) if $args{CC}; $smtp->bcc(&_deref($args{BCC})) if $args{BCC}; $smtp->data(); $smtp->datasend($mime->stringify); $smtp->dataend; $smtp->quit; } else { $self->{error} = "send e-mail failure ($args{TO})"; return 0; } return 1; } sub errstr { return shift->{error}; } sub _deref { my $arg = shift; return ref $arg eq 'ARRAY' ? @{$arg} : $arg; } 1; __END__ =head1 NAME Email::Gmail::Send - Very simple Gmail sending interface. =head1 SYNOPSIS use Email::Gmail::Send; my $gmail = Email::Gmail::Send->new( username => 'username', password => 'password', ); $gmail->send( From => $from, TO => $to, CC => [$cc, $cc2], BCC => [$bcc, $bcc2], Subject => 'hello gmail', Body => 'agyagyagyagya', Parts => [ { Path => '/home/hoge/erogazo/HENTAI.jpg', Name => 'Abnormal.jpg' }, { Path => '/home/fuga/HENTAI.jpg' }, ], ) or die $gmail->errstr; =head1 DESCRIPTION Email::Gmail::Send is Very simple Gmail sending interface. You can also send attachments in multipart. Of course, TO CC and BCC can also specify more than one. =head2 Methods =over =item new Constructor =item send send =item errstr return error message =back =head1 AUTHOR Yuji Shimada E<lt>xaicron {at} gmail.comE<gt> =head1 SEE ALSO L<MIME::Entity> L<Net::SMTP::SSL> L<Authen::SASL> =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut
POD������½��Џ���������������������������«������������
\³\���\���\����돫������
���³������µ»��ӏ�����������¾����������������������������¹���̏�¡��½������������������½��Џ�����³���ޏ��������·��¡����Ï��������������������ޏ��Ð��¡��³������\���\���\�돢�̏�������㏢�������������������������·�����������Ï���
¹¹���·���µ������������¾���¹�����������¡�����������������������¡����������������������ҏ��������«���������·������
¹¹���·���µ������������¾���¹�����������¡�����������������������¡����������������������ҏ��������«���������·������
����Ï�����·�����������������ď�������������������̏����������Ï�𡭏������������������¹��¡� ����������������������Ï�����¹��������¡� ����Ï��������»�ߏ��������������������������¹��¡�