Send alternative/multipart emails

Plus some other adjustements
Fix #20
Unfortunatly, it's not sufficient, as gmail still often tags invitations as spam :-(
but still a bit better
master
Daniel Berteaud 11 years ago
parent 9aa15e8597
commit 1d8ad29190
  1. 40
      lib/Mojolicious/Plugin/Mailer.pm
  2. 8
      lib/Vroom/I18N/en.pm
  3. 6
      lib/Vroom/I18N/fr.pm
  4. 3
      public/vroom.pl
  5. 15
      templates/default/invite.email_html.ep
  6. 13
      templates/default/invite.email_text.ep

@ -24,15 +24,30 @@ sub register {
my @data = @{ $args->{data} }; my @data = @{ $args->{data} };
my @parts = Email::MIME->create( my @parts = (
body => Encode::encode('UTF-8', $self->render( Email::MIME->create(
@data, body => Encode::encode('UTF-8', $self->render(
format => $args->{format} @data,
? $args->{format} format => $args->{format} ? $args->{format} : 'email_html',
: 'email', partial => 1
partial => 1 )),
)) attributes => {
); charset => 'utf-8',
content_type => 'text/html',
}
),
Email::MIME->create(
body => Encode::encode('UTF-8', $self->render(
@data,
format => $args->{format} ? $args->{format} : 'email_text',
partial => 1
)),
attributes => {
charset => 'utf-8',
content_type => 'text/plain',
}
),
);
my $transport = defined $args->{transport} || $conf->{transport} my $transport = defined $args->{transport} || $conf->{transport}
? $args->{transport} || $conf->{transport} ? $args->{transport} || $conf->{transport}
@ -44,12 +59,11 @@ sub register {
$header->{Subject} ||= $self->stash('title'); $header->{Subject} ||= $self->stash('title');
my $email = Email::MIME->create( my $email = Email::MIME->create(
header => [ %{$header} ], header => [ %{$header} ],
parts => [ @parts ], parts => [ @parts ]
); );
$email->charset_set ( $args->{charset} ? $args->{charset} : 'utf-8' ); $email->charset_set ( $args->{charset} ? $args->{charset} : 'utf-8' );
$email->encoding_set ( $args->{encoding} ? $args->{encoding} : 'base64' );
$email->content_type_set( $args->{content_type} ? $args->{content_type} : 'text/html' ); $email->content_type_set( $args->{content_type} ? $args->{content_type} : 'text/html' );
return Email::Sender::Simple->try_to_send( $email, { transport => $transport } ) if $transport; return Email::Sender::Simple->try_to_send( $email, { transport => $transport } ) if $transport;

@ -10,11 +10,11 @@ our %Lexicon = (
"ERROR_ROOM_s_LOCKED" => "The room %s is locked, you cannot join it", "ERROR_ROOM_s_LOCKED" => "The room %s is locked, you cannot join it",
"ERROR_OCCURED" => "An error occured", "ERROR_OCCURED" => "An error occured",
"ERROR_NOT_LOGGED_IN" => "Sorry, your not logged in", "ERROR_NOT_LOGGED_IN" => "Sorry, your not logged in",
"JOIN_US_ON_s" => "Video conference %s", "EMAIL_INVITATION" => "Video conference invitation",
"INVITE_SENT_TO_s" => "An invitation was sent to %s", "INVITE_SENT_TO_s" => "An invitation was sent to %s",
"TO_JOIN_s_CLICK_s" => "You're invited to join the video conference %s. " . "TO_JOIN_CLICK_THIS_LINK" => "You're invited to join a video conference. " .
"All you need is a modern web browser and a webcam. When you're ready " . "All you need is a modern web browser and a webcam. When you're ready, " .
"click on <a href='%s'>this link</a>", "just go to this address",
"HAVE_A_NICE_MEETING" => "Have a nice meeting :-)", "HAVE_A_NICE_MEETING" => "Have a nice meeting :-)",
"EMAIL_SIGN" => "VROOM! And video conferencing becomes free, simple and safe", "EMAIL_SIGN" => "VROOM! And video conferencing becomes free, simple and safe",
"FEEDBACK" => "Feedback", "FEEDBACK" => "Feedback",

@ -12,10 +12,10 @@ our %Lexicon = (
"ERROR_ROOM_s_LOCKED" => "Le salon %s est verrouillé, vous ne pouvez pas le rejoindre", "ERROR_ROOM_s_LOCKED" => "Le salon %s est verrouillé, vous ne pouvez pas le rejoindre",
"ERROR_OCCURED" => "Une erreur est survenue", "ERROR_OCCURED" => "Une erreur est survenue",
"ERROR_NOT_LOGGED_IN" => "Désolé, vous n'êtes pas identifié", "ERROR_NOT_LOGGED_IN" => "Désolé, vous n'êtes pas identifié",
"JOIN_US_ON_s" => "Vidéo conférence %s", "EMAIL_INVITATION" => "Vidéo conférence",
"TO_JOIN_s_CLICK_s" => "Vous êtes invité à rejoindre le salon de vidéo conférence %s. " . "TO_JOIN_CLICK_THIS_LINK" => "Vous êtes attendu sur un salon de vidéo conférence. " .
"Tout ce dont vous avez besoin est un navigateur web récent et " . "Tout ce dont vous avez besoin est un navigateur web récent et " .
"une webcam. Quand vous êtes prêt, cliquez sur <a href='%s'>ce lien</a>", "une webcam. Quand vous êtes prêt, rendez-vous sur cette adresse",
"HAVE_A_NICE_MEETING" => "Bonne réunion :-)", "HAVE_A_NICE_MEETING" => "Bonne réunion :-)",
"EMAIL_SIGN" => "VROOM! Et la visio conférence devient libre, simple et sûr", "EMAIL_SIGN" => "VROOM! Et la visio conférence devient libre, simple et sûr",
"FEEDBACK" => "Retour d'expérience", "FEEDBACK" => "Retour d'expérience",

@ -378,9 +378,10 @@ post '/action' => sub {
my $rcpt = $self->param('recipient'); my $rcpt = $self->param('recipient');
$self->email( $self->email(
header => [ header => [
Subject => encode("MIME-Header", sprintf ($self->l("JOIN_US_ON_s"), $room)), Subject => encode("MIME-Header", $self->l("EMAIL_INVITATION")),
To => $rcpt To => $rcpt
], ],
content_type => 'multipart/alternative',
data => [ data => [
template => 'invite', template => 'invite',
room => $room room => $room

@ -4,10 +4,19 @@
my $url = $self->url_for('/')->to_abs; my $url = $self->url_for('/')->to_abs;
$url .= ($url =~ m/\/$/) ? '' : '/'; $url .= ($url =~ m/\/$/) ? '' : '/';
%> %>
<%== <%=
sprintf($self->l('TO_JOIN_s_CLICK_s'), $room, $url.$room); $self->l('TO_JOIN_CLICK_THIS_LINK');
%> %>
</p> <br/>
<p>
<center>
<h1>
<a href="<%= $url . $room %>">
<%= $url . $room %>
</a>
</h1>
</center>
</p>
<br> <br>
<p> <p>
<%=l 'HAVE_A_NICE_MEETING' %> <%=l 'HAVE_A_NICE_MEETING' %>

@ -0,0 +1,13 @@
<%
my $url = $self->url_for('/')->to_abs;
$url .= ($url =~ m/\/$/) ? '' : '/';
%>
<%=
$self->l('TO_JOIN_CLICK_THIS_LINK')
%>
<%= $url . $room %>
<%=l 'HAVE_A_NICE_MEETING' %>
--
<%=l 'EMAIL_SIGN' %>
Loading…
Cancel
Save