|
NAMEMojolicious::Plugin::Mail - Mojolicious Plugin for send mail SYNOPSIS # Mojolicious::Lite
plugin 'mail';
# Mojolicious with config
$self->plugin(mail => {
from => 'sharifulin@gmail.com',
type => 'text/html',
});
# in controller
$self->mail(
to => 'sharifulin@gmail.com',
subject => 'Test',
data => 'use Perl or die;',
);
# in controller, using render
$self->mail(to => 'sharifulin@gmail.com', template => 'controller/action', format => 'mail');
# template: controller/action.mail.ep
% stash subject => 'Test';
use Perl or die;
DESCRIPTIONMojolicous::Plugin::Mail is a plugin for Mojolicious apps to send mail using MIME::Lite. HELPERSMojolicious::Plugin::Mail contains two helpers: mail and render_mail. "mail" # simple interface
$self->mail(
to => 'sharifulin@gmail.com',
from => 'sharifulin@gmail.com',
reply_to => 'reply_to+sharifulin@gmail.com',
cc => '..',
bcc => '..',
type => 'text/plain',
subject => 'Test',
data => 'use Perl or die;',
);
# interface as MIME::Lite
$self->mail(
# test mode
test => 1,
# as MIME::Lite->new( ... )
mail => {
To => 'sharifulin@gmail.com',
Subject => 'Test',
Data => 'use Perl or die;',
# add credentials parameters
AuthUser => 'username',
AuthPass => 'password',
},
attach => [
# as MIME::Lite->attach( .. )
{ ... },
...
},
headers => [
# as MIME::Lite->add( .. )
{ ... },
...
},
attr => [
# as MIME::Lite->attr( .. )
{ ... },
...
},
);
Build and send email, return mail as string. Supported parameters:
If no subject, uses value of stash parameter 'subject'. If no data, call render_mail helper with all stash parameters. "render_mail" my $data = $self->render_mail('user/signup');
# or use stash params
my $data = $self->render_mail(template => 'user/signup', user => $user);
Render mail template and return data, mail template format is mail, i.e. user/signup.mail.ep. ATTRIBUTESMojolicious::Plugin::Mail contains one attribute - conf. "conf"$plugin->conf; Config of mail plugin, hashref. Keys of conf:
my $conf = {
from => 'sharifulin@gmail.com,
encoding => 'base64',
type => 'text/html',
how => 'sendmail',
howargs => [ '/usr/sbin/sendmail -t' ],
};
# in Mojolicious app
$self->plugin(mail => $conf);
# in Mojolicious::Lite app
plugin mail => $conf;
METHODSMojolicious::Plugin::Mail inherits all methods from Mojolicious::Plugin and implements the following new ones. "register"$plugin->register($app, $conf); Register plugin hooks in Mojolicious application. "build" $plugin->build( mail => { ... }, ... );
Build mail using MIME::Lite and MIME::EncWords and return MIME::Lite object. TEST MODEMojolicious::Plugin::Mail has test mode, no send mail. # all mail don't send mail
BEGIN { $ENV{MOJO_MAIL_TEST} = 1 };
# or only once
$self->mail(
test => 1,
to => '...',
);
EXAMPLESThe Mojolicious::Lite example you can see in example/test.pl. Simple interface for send plain mail: get '/simple' => sub {
my $self = shift;
$self->mail(
to => 'sharifulin@gmail.com',
type => 'text/plain',
subject => 'Тест письмо',
data => 'Привет!',
);
};
Simple send mail: get '/simple' => sub {
my $self = shift;
$self->mail(
mail => {
To => 'sharifulin@gmail.com',
Subject => 'Тест письмо',
Data => "<p>Привет!</p>",
},
);
};
Simple send mail with test mode: get '/simple2' => sub {
my $self = shift;
my $mail = $self->mail(
test => 1,
mail => {
To => '"Анатолий Шарифулин" sharifulin@gmail.com',
Cc => '"Анатолий Шарифулин" <sharifulin@gmail.com>, Anatoly Sharifulin sharifulin@gmail.com',
Bcc => 'sharifulin@gmail.com',
Subject => 'Тест письмо',
Type => 'text/plain',
Data => "<p>Привет!</p>",
},
);
warn $mail;
};
Mail with binary attachcment, charset is windows-1251, mimewords off and mail has custom header: get '/attach' => sub {
my $self = shift;
my $mail = $self->mail(
charset => 'windows-1251',
mimeword => 0,
mail => {
To => 'sharifulin@gmail.com',
Subject => 'Test attach',
Type => 'multipart/mixed'
},
attach => [
{
Data => 'Any data',
},
{
Type => 'BINARY',
Filename => 'crash.data',
Disposition => 'attachment',
Data => 'binary data binary data binary data binary data binary data',
},
],
headers => [ { 'X-My-Header' => 'Mojolicious' } ],
);
};
Multipart mixed mail: get '/multi' => sub {
my $self = shift;
$self->mail(
mail => {
To => 'sharifulin@gmail.com',
Subject => 'Мульти',
Type => 'multipart/mixed'
},
attach => [
{
Type => 'TEXT',
Encoding => '7bit',
Data => "Just a quick note to say hi!"
},
{
Type => 'image/gif',
Path => $0
},
{
Type => 'x-gzip',
Path => "gzip < $0 |",
ReadNow => 1,
Filename => "somefile.zip"
},
],
);
};
Render mail using simple interface and Reply-To header: get '/render_simple' => sub {
my $self = shift;
my $mail = $self->mail(to => 'sharifulin@gmail.com', reply_to => 'reply_to+sharifulin@gmail.com');
$self->render(ok => 1, mail => $mail);
} => 'render';
Mail with render data and subject from stash param: get '/render' => sub {
my $self = shift;
my $data = $self->render_mail('render');
$self->mail(
mail => {
To => 'sharifulin@gmail.com',
Subject => $self->stash('subject'),
Data => $data,
},
);
} => 'render';
__DATA__
@@ render.html.ep
<p>Hello render!</p>
@@ render.mail.ep
% stash 'subject' => 'Привет render';
<p>Привет mail render!</p>
Send email via remote SMTP server. # in main
$self->plugin(
mail => {
from => 'info@host.example',
type => 'text/html',
how => 'smtp',
howargs => [ 'mail.host.example',
AuthUser => 'me@host.example',
AuthPass => '123xyz',
],
}
);
# in controller
$self->mail(
to => 'friend@hishost.example',
subject => 'Test',
data => 'use Perl or die;',
);
SEE ALSOMIME::Lite MIME::EncWords Mojolicious Mojolicious::Guides <http://mojolicious.org>. AUTHORAnatoly Sharifulin <sharifulin@gmail.com> THANKSAlex Kapranoff <kapranoff@gmail.com> BUGSPlease report any bugs or feature requests to "bug-mojolicious-plugin-mail at rt.cpan.org", or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.htMail?Queue=Mojolicious-Plugin-Mail>. We will be notified, and then you'll automatically be notified of progress on your bug as we make changes.
COPYRIGHT & LICENSECopyright (C) 2010-2013 by Anatoly Sharifulin. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|