Improve digest email template
authorEgor Kislitsyn <egor@kislitsyn.com>
Wed, 14 Aug 2019 13:46:05 +0000 (20:46 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Wed, 14 Aug 2019 13:46:05 +0000 (20:46 +0700)
lib/mix/tasks/pleroma/digest.ex
lib/pleroma/emails/user_email.ex
lib/pleroma/web/templates/email/digest.html.eex
lib/pleroma/web/views/email_view.ex
test/mix/tasks/pleroma.digest_test.exs

index 81c207e10848f92aab6f9695f003a35127845244..430116a505e4db3229ea0457f01d97f03c07529e 100644 (file)
@@ -27,7 +27,15 @@ defmodule Mix.Tasks.Pleroma.Digest do
 
     patched_user = %{user | last_digest_emailed_at: last_digest_emailed_at}
 
-    _user = Pleroma.DigestEmailWorker.perform(patched_user)
-    Mix.shell().info("Digest email have been sent to #{nickname} (#{user.email})")
+    with %Swoosh.Email{} = email <- Pleroma.Emails.UserEmail.digest_email(patched_user) do
+      {:ok, _} = Pleroma.Emails.Mailer.deliver(email)
+
+      Mix.shell().info("Digest email have been sent to #{nickname} (#{user.email})")
+    else
+      _ ->
+        Mix.shell().info(
+          "Cound't find any mentions for #{nickname} since #{last_digest_emailed_at}"
+        )
+    end
   end
 end
index 49046bb8b4e8b13f1f42419440a95224ca3bf4cf..bf6b811b1c47515ad53baa4249dff71605f6f6af 100644 (file)
@@ -123,6 +123,11 @@ defmodule Pleroma.Emails.UserEmail do
       end)
 
     with [_ | _] = mentions <- new_notifications.mentions do
+      mentions =
+        Enum.map(mentions, fn mention ->
+          update_in(mention.object.data["content"], &format_links/1)
+        end)
+
       html_data = %{
         instance: instance_name(),
         user: user,
@@ -131,17 +136,29 @@ defmodule Pleroma.Emails.UserEmail do
         unsubscribe_link: unsubscribe_url(user, "digest")
       }
 
+      logo_path = Path.join(:code.priv_dir(:pleroma), "static/static/logo.png")
+
       new()
       |> to(recipient(user))
       |> from(sender())
       |> subject("Your digest from #{instance_name()}")
+      |> put_layout(false)
       |> render_body("digest.html", html_data)
+      |> attachment(Swoosh.Attachment.new(logo_path, filename: "logo.png", type: :inline))
     else
       _ ->
         nil
     end
   end
 
+  defp format_links(str) do
+    re = ~r/<a.+href=['"].*>/iU
+
+    String.replace(str, re, fn link ->
+      String.replace(link, "<a", "<a style=\"color: #d8a070;text-decoration: none;\"")
+    end)
+  end
+
   @doc """
   Generate unsubscribe link for given user and notifications type.
   The link contains JWT token with the data, and subscription can be modified without
index c9dd699fd6e380004d2d8725462c6d3af42e7a0f..61d57093b1d6fc9b4c0d4e80d4497fb8b9b3aec4 100644 (file)
-<h1>Hey <%= @user.nickname %>, here is what you've missed!</h1>
-
-<h2>New Mentions:</h2>
-<ul>
-<%= for %{data: mention, object: object, from: from} <- @mentions do %>
-  <li><%= link from.nickname, to: mention.activity.actor %>: <%= raw object.data["content"] %></li>
-<% end %>
-</ul>
-
-<%= if @followers != [] do %>
-<h2><%= length(@followers) %> New Followers:</h2>
-<ul>
-<%= for %{data: follow, from: from} <- @followers do %>
-  <li><%= link from.nickname, to: follow.activity.actor %></li>
-<% end %>
-</ul>
-<% end %>
-
-<p>You have received this email because you have signed up to receive digest emails from <b><%= @instance %></b> Pleroma instance.</p>
-<p>The email address you are subscribed as is <%= @user.email %>. To unsubscribe, please go <%= link "here", to: @unsubscribe_link %>.</p>
\ No newline at end of file
+<!DOCTYPE html
+       PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office"
+       xmlns:v="urn:schemas-microsoft-com:vml">
+
+<head>
+       <!--[if gte mso 9]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]-->
+       <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
+       <meta content="width=device-width" name="viewport" />
+       <!--[if !mso]><!-->
+       <meta content="IE=edge" http-equiv="X-UA-Compatible" />
+       <!--<![endif]-->
+       <title><%= @email.subject %><</title>
+       <!--[if !mso]><!-->
+       <!--<![endif]-->
+       <style type="text/css">
+               body {
+                       margin: 0;
+                       padding: 0;
+               }
+
+               a {
+                       color: #d8a070;
+                       text-decoration: none;
+               }
+
+               table,
+               td,
+               tr {
+                       vertical-align: top;
+                       border-collapse: collapse;
+               }
+
+               * {
+                       line-height: inherit;
+               }
+
+               a[x-apple-data-detectors=true] {
+                       color: inherit !important;
+                       text-decoration: none !important;
+               }
+       </style>
+       <style id="media-query" type="text/css">
+               @media (max-width: 610px) {
+
+                       .block-grid,
+                       .col {
+                               min-width: 320px !important;
+                               max-width: 100% !important;
+                               display: block !important;
+                       }
+
+                       .block-grid {
+                               width: 100% !important;
+                       }
+
+                       .col {
+                               width: 100% !important;
+                       }
+
+                       .col>div {
+                               margin: 0 auto;
+                       }
+
+                       .no-stack .col {
+                               min-width: 0 !important;
+                               display: table-cell !important;
+                       }
+
+                       .no-stack.two-up .col {
+                               width: 50% !important;
+                       }
+
+                       .no-stack .col.num4 {
+                               width: 33% !important;
+                       }
+
+                       .no-stack .col.num8 {
+                               width: 66% !important;
+                       }
+
+                       .no-stack .col.num4 {
+                               width: 33% !important;
+                       }
+
+                       .no-stack .col.num3 {
+                               width: 25% !important;
+                       }
+
+                       .no-stack .col.num6 {
+                               width: 50% !important;
+                       }
+
+                       .no-stack .col.num9 {
+                               width: 75% !important;
+                       }
+
+               }
+       </style>
+</head>
+
+<body class="clean-body" style="margin: 0; padding: 0; -webkit-text-size-adjust: 100%; background-color: #2C3645;">
+       <!--[if IE]><div class="ie-browser"><![endif]-->
+       <table bgcolor="#2C3645" cellpadding="0" cellspacing="0" class="nl-container" role="presentation"
+               style="table-layout: fixed; vertical-align: top; min-width: 320px; Margin: 0 auto; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #2C3645; width: 100%;"
+               valign="top" width="100%">
+               <tbody>
+                       <tr style="vertical-align: top;" valign="top">
+                               <td style="word-break: break-word; vertical-align: top;" valign="top">
+                                       <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color:#2C3645"><![endif]-->
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <div align="center" class="img-container center fixedwidth"
+                                                                                               style="padding-right: 0px;padding-left: 0px;">
+                                                                                               <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr style="line-height:0px"><td style="padding-right: 0px;padding-left: 0px;" align="center"><![endif]--><img
+                                                                                                       align="center" alt="Image" border="0" class="center fixedwidth" src="cid:logo.png"
+                                                                                                       style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 80px; display: block;"
+                                                                                                       title="Image" width="80" />
+                                                                                               <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       </div>
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#b9b9ba;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #b9b9ba;">
+                                                                                                       <p style="font-size: 14px; line-height: 36px; text-align: center; margin: 0;"><span
+                                                                                                                       style="font-size: 30px; color: #d8a070;text-decoration: none;">Hey <%= @user.nickname %>, here is what you've missed!</span></p>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 15px; padding-left: 15px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 15px; padding-left: 15px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation"
+                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                               valign="top" width="100%">
+                                                                                               <tbody>
+                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                               <td class="divider_inner"
+                                                                                                                       style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;"
+                                                                                                                       valign="top">
+                                                                                                                       <table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content"
+                                                                                                                               height="0" role="presentation"
+                                                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-top: 1px solid #B9B9BA; height: 0px;"
+                                                                                                                               valign="top" width="100%">
+                                                                                                                               <tbody>
+                                                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                                                               <td height="0"
+                                                                                                                                                       style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                                                                                       valign="top"><span></span></td>
+                                                                                                                                       </tr>
+                                                                                                                               </tbody>
+                                                                                                                       </table>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </tbody>
+                                                                                       </table>
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#B9B9BA;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <p
+                                                                                                       style="font-size: 12px; line-height: 24px; text-align: center; color: #B9B9BA; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; margin: 0;">
+                                                                                                       <span style="font-size: 20px;">Mentions</span></p>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+
+          <%= for %{data: mention, object: object, from: from} <- @mentions do %>
+                                       <%# mention START %>
+                                       <%# user card START %>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid mixed-two-up no-stack"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="147" style="background-color:#1B2635;width:76px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 20px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num3"
+                                                                       style="display: table-cell; vertical-align: top; max-width: 320px; min-width: 76px; width: 76px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 20px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <div align="left" class="img-container left fixedwidth"
+                                                                                               style="padding-right: 0px;padding-left: 0px;">
+                                                                                               <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr style="line-height:0px"><td style="padding-right: 0px;padding-left: 0px;" align="left"><![endif]--><img
+                                                                                                       alt="<%= from.name %>" border="0" class="left fixedwidth" src="<%= avatar_url(from) %>"
+                                                                                                       style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 76px; display: block;"
+                                                                                                       title="<%= from.name %>" width="76" />
+                                                                                               <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       </div>
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td><td align="center" width="442" style="background-color:#1B2635;width:442px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num9"
+                                                                       style="display: table-cell; vertical-align: top; min-width: 320px; max-width: 441px; width: 442px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#B9B9BA;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #B9B9BA;">
+                                                                                                       <p style="font-size: 14px; line-height: 19px; margin: 0;"><span
+                                                                                                                       style="font-size: 16px; color: #999999;"><%= from.name %></span></p>
+                                                                                                       <p style="font-size: 14px; line-height: 19px; margin: 0;"><span
+                                                                                                                       style="font-size: 16px;"><%= link "@" <> from.nickname, style: "color: #d8a070;text-decoration: none;", to: mention.activity.actor %></span></p>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <%# user card END %>
+
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 15px; padding-left: 15px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 15px; padding-left: 15px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#B9B9BA;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #B9B9BA;">
+                                                                                                       <span style="font-size: 16px; line-height: 19px;"><%= raw object.data["content"] %></span></div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 15px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#555555;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:15px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #555555;">
+                                                                                                       <p style="font-size: 14px; line-height: 16px; margin: 0;"><%= format_date object.data["published"] %></p>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <%# mention END %>
+          <% end %>
+
+          <%= if @followers != [] do %>
+
+          <%# new followers header START %>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 15px; padding-left: 15px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 15px; padding-left: 15px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation"
+                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                               valign="top" width="100%">
+                                                                                               <tbody>
+                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                               <td class="divider_inner"
+                                                                                                                       style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;"
+                                                                                                                       valign="top">
+                                                                                                                       <table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content"
+                                                                                                                               height="0" role="presentation"
+                                                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-top: 1px solid #B9B9BA; height: 0px;"
+                                                                                                                               valign="top" width="100%">
+                                                                                                                               <tbody>
+                                                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                                                               <td height="0"
+                                                                                                                                                       style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                                                                                       valign="top"><span></span></td>
+                                                                                                                                       </tr>
+                                                                                                                               </tbody>
+                                                                                                                       </table>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </tbody>
+                                                                                       </table>
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#B9B9BA;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #B9B9BA;">
+                                                                                                       <p style="font-size: 12px; line-height: 24px; text-align: center; margin: 0;"><span
+                                                                                                                       style="font-size: 20px;"><%= length(@followers) %> New Followers</span><span
+                                                                                                                       style="font-size: 20px; line-height: 24px;"></span></p>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+          <%# new followers header END %>
+
+        <%= for %{data: follow, from: from} <- @followers do %>
+                                       <%# user card START %>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid mixed-two-up no-stack"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="147" style="background-color:#1B2635;width:76px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 20px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num3"
+                                                                       style="display: table-cell; vertical-align: top; max-width: 320px; min-width: 76px; width: 76px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 20px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <div align="left" class="img-container left fixedwidth"
+                                                                                               style="padding-right: 0px;padding-left: 0px;">
+                                                                                               <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr style="line-height:0px"><td style="padding-right: 0px;padding-left: 0px;" align="left"><![endif]--><img
+                                                                                                       alt="<%= from.name %>" border="0" class="left fixedwidth" src="<%= avatar_url(from) %>"
+                                                                                                       style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 76px; display: block;"
+                                                                                                       title="<%= from.name %>" width="76" />
+                                                                                               <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       </div>
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td><td align="center" width="442" style="background-color:#1B2635;width:442px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num9"
+                                                                       style="display: table-cell; vertical-align: top; min-width: 320px; max-width: 441px; width: 442px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#B9B9BA;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <div
+                                                                                                       style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14px; color: #B9B9BA;">
+                                                                                                       <p style="font-size: 14px; line-height: 19px; margin: 0;"><span
+                                                                                                                       style="font-size: 16px; color: #999999;"><%= from.name %></span></p>
+                                                                                                       <p style="font-size: 14px; line-height: 19px; margin: 0;"><span
+                                                                                                                       style="font-size: 16px;"><%= link "@" <> from.nickname, style: "color: #d8a070;text-decoration: none;", to: follow.activity.actor %></span></p>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <%# user card END %>
+        <% end %>
+
+
+          <% end %>
+
+          <%# divider start %>
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation"
+                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                               valign="top" width="100%">
+                                                                                               <tbody>
+                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                               <td class="divider_inner"
+                                                                                                                       style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;"
+                                                                                                                       valign="top">
+                                                                                                                       <table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content"
+                                                                                                                               height="0" role="presentation"
+                                                                                                                               style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-top: 1px solid #B9B9BA; height: 0px;"
+                                                                                                                               valign="top" width="100%">
+                                                                                                                               <tbody>
+                                                                                                                                       <tr style="vertical-align: top;" valign="top">
+                                                                                                                                               <td height="0"
+                                                                                                                                                       style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"
+                                                                                                                                                       valign="top"><span></span></td>
+                                                                                                                                       </tr>
+                                                                                                                               </tbody>
+                                                                                                                       </table>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </tbody>
+                                                                                       </table>
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+
+          <%# divider end %>
+
+
+                                       <div style="background-color:transparent;">
+                                               <div class="block-grid"
+                                                       style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #1B2635;">
+                                                       <div style="border-collapse: collapse;display: table;width: 100%;background-color:#1B2635;">
+                                                               <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:590px"><tr class="layout-full-width" style="background-color:#1B2635"><![endif]-->
+                                                               <!--[if (mso)|(IE)]><td align="center" width="590" style="background-color:#1B2635;width:590px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
+                                                               <div class="col num12"
+                                                                       style="min-width: 320px; max-width: 590px; display: table-cell; vertical-align: top; width: 590px;">
+                                                                       <div style="width:100% !important;">
+                                                                               <!--[if (!mso)&(!IE)]><!-->
+                                                                               <div
+                                                                                       style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
+                                                                                       <!--<![endif]-->
+                                                                                       <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; font-family: Arial, sans-serif"><![endif]-->
+                                                                                       <div
+                                                                                               style="color:#BBBBBB;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">
+                                                                                               <p
+                                                                                                       style="font-size: 12px; line-height: 16px; text-align: center; color: #BBBBBB; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; margin: 0;">
+                                                                                                       <span style="font-size: 14px;">You have received this email because you have signed up to receive digest emails from <b><%= @instance %></b> Pleroma instance.</span></p>
+                                                                                               <p
+                                                                                                       style="font-size: 12px; line-height: 14px; text-align: center; color: #BBBBBB; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; margin: 0;">
+                                                                                                        </p>
+                                                                                               <p
+                                                                                                       style="font-size: 12px; line-height: 16px; text-align: center; color: #BBBBBB; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; margin: 0;">
+                                                                                                       <span style="font-size: 14px;">The email address you are subscribed as is <a href="mailto:<%= @user.email %>" style="color: #d8a070;text-decoration: none;"><%= @user.email %></a>. </span></p>
+                                                                                               <p
+                                                                                                       style="font-size: 12px; line-height: 16px; text-align: center; color: #BBBBBB; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; margin: 0;">
+                                                                                                       <span style="font-size: 14px;">To unsubscribe, please go <%= link "here", style: "color: #d8a070;text-decoration: none;", to: @unsubscribe_link %>.</span></p>
+                                                                                       </div>
+                                                                                       <!--[if mso]></td></tr></table><![endif]-->
+                                                                                       <!--[if (!mso)&(!IE)]><!-->
+                                                                               </div>
+                                                                               <!--<![endif]-->
+                                                                       </div>
+                                                               </div>
+                                                               <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                                                               <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
+                                                       </div>
+                                               </div>
+                                       </div>
+                                       <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+       <!--[if (IE)]></div><![endif]-->
+</body>
+
+</html>
index b63eb162c15055053074deffcf1487edd05ac754..b506a234b636f4d2a204448eb11ef984c271d449 100644 (file)
@@ -2,4 +2,14 @@ defmodule Pleroma.Web.EmailView do
   use Pleroma.Web, :view
   import Phoenix.HTML
   import Phoenix.HTML.Link
+
+  def avatar_url(user) do
+    Pleroma.User.avatar_url(user)
+  end
+
+  def format_date(date) when is_binary(date) do
+    date
+    |> Timex.parse!("{ISO:Extended:Z}")
+    |> Timex.format!("{Mshort} {D}, {YYYY} {h24}:{m}")
+  end
 end
index 595f64ed70e3d95e8f4d45ab1ee94d6ba9fa5926..4bfa1fb93beba44eb2bf75834acd6f91720e48a9 100644 (file)
@@ -44,7 +44,7 @@ defmodule Mix.Tasks.Pleroma.DigestTest do
 
       assert_email_sent(
         to: {user2.name, user2.email},
-        html_body: ~r/new mentions:/i
+        html_body: ~r/here is what you've missed!/i
       )
     end
   end