NAME
Mojolicious::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;
DESCRIPTION
Mojolicous::Plugin::Mail is a plugin for Mojolicious apps to send mail using MIME::Lite.
HELPERS
Mojolicious::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:
to
Header 'To' of mail.
from
Header 'From' of mail.
reply_to
Header 'Reply-To' of mail.
cc
Header 'Cc' of mail.
bcc
Header 'Bcc' of mail.
type
Content type of mail, default is conf's type.
subject
Header 'Subject' of mail.
data
Content of mail
mail
Hashref, containts parameters as new(PARAMHASH). See MIME::Lite.
attach
Arrayref of hashref, hashref containts parameters as attach(PARAMHASH). See MIME::Lite.
headers
Arrayref of hashref, hashref containts parameters as add(TAG, VALUE). See MIME::Lite.
attr
Arrayref of hashref, hashref containts parameters as attr(ATTR, VALUE). See MIME::Lite.
test
Test mode, don't send mail.
charset
Charset of mail, default charset is UTF-8.
mimeword
Using mimeword or not, default value is 1.
nomailer
No using 'X-Mailer' header of mail, default value is 1.
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.
ATTRIBUTES
Mojolicious::Plugin::Mail contains one attribute - conf.
conf
$plugin->conf;
Config of mail plugin, hashref.
Keys of conf:
from
From address, default value is test-mail-plugin@mojolicio.us.
encoding
Encoding of Subject and any Data, value is MIME::Lite content transfer encoding http://search.cpan.org/~rjbs/MIME-Lite-3.027/lib/MIME/Lite.pm#Content_transfer_encodings Default value is base64.
charset
Default charset of Subject and any Data, default value is UTF-8.
type
Default type of Data, default value is text/plain.
how
HOW parameter of MIME::Lite::send: sendmail or smtp.
howargs
HOWARGS parameter of MIME::Lite::send (arrayref).
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;
METHODS
Mojolicious::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 MODE
Mojolicious::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 => '...',
);
EXAMPLES
The 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 ALSO
MIME::Lite MIME::EncWords Mojolicious Mojolicious::Guides http://mojolicious.org.
AUTHOR
Anatoly Sharifulin <sharifulin@gmail.com>
THANKS
Alex Kapranoff <kapranoff@gmail.com>
BUGS
Please 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.
Github
http://github.com/sharifulin/mojolicious-plugin-mail/tree/master
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.htMail?Dist=Mojolicious-Plugin-Mail
AnnoCPAN: Annotated CPAN documentation
CPANTS: CPAN Testing Service
http://cpants.perl.org/dist/overview/Mojolicious-Plugin-Mail
CPAN Ratings
Search CPAN
COPYRIGHT & LICENSE
Copyright (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.