Email.pm 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package Trog::Email;
  2. use strict;
  3. use warnings;
  4. no warnings qw{experimental};
  5. use feature qw{signatures};
  6. use Email::MIME;
  7. use Email::Sender::Simple;
  8. use Trog::Auth;
  9. use Trog::Log qw{:all};
  10. use Trog::Renderer;
  11. sub contact ( $user, $from, $subject, $data ) {
  12. my $email = Trog::Auth::email4user($user);
  13. die "No contact email set for user $user!" unless $email;
  14. my $render = Trog::Renderer->render(
  15. contenttype => 'multipart/related',
  16. code => 200,
  17. template => $data->{template},
  18. data => {
  19. method => 'EMAIL',
  20. # Important - this will prevent caching
  21. route => '',
  22. %$data,
  23. },
  24. );
  25. my $text = $render->{text}[2][0];
  26. my $html = $render->{html}[2][0];
  27. my @parts = (
  28. Email::MIME->create(
  29. attributes => {
  30. content_type => "text/plain",
  31. disposition => "attachment",
  32. charset => 'UTF-8',
  33. },
  34. body => $text,
  35. ),
  36. Email::MIME->create(
  37. attributes => {
  38. content_type => "text/html",
  39. disposition => "attachment",
  40. charset => "UTF-8",
  41. },
  42. body => $html,
  43. ),
  44. );
  45. my $mail = Email::MIME->create(
  46. header_str => [
  47. From => $from,
  48. To => [$email],
  49. Subject => $subject,
  50. ],
  51. parts => \@parts,
  52. );
  53. Email::Sender::Simple->try_to_send($mail) or do {
  54. FATAL("Could not send email from $from to $email!");
  55. };
  56. return 1;
  57. }
  58. 1;