Как я могу отправить HTML письмо с Perl? - PullRequest
11 голосов
/ 12 апреля 2010

Я пытаюсь отправить электронное письмо в формате HTML с помощью Perl.

 open(MAIL,"|/usr/sbin/sendmail -t");

    ## Mail Header
    print MAIL "To: $to\n";
    print MAIL "From: $from\n";
    print MAIL "Subject: $subject\n\n";
    ## Mail Body
    print MAIL "Content-Type: text/html; charset=ISO-8859-1\n\n"
        . "<html><head></head><body>@emailBody";
 close(MAIL)

Это правильный способ сделать это? Это не работает по какой-то причине. Спасибо за вашу помощь.

Ответы [ 7 ]

19 голосов
/ 12 апреля 2010

Начните с Электронная почта :: Отправитель :: Простой или Электронная почта :: Отправитель .
В CPAN есть руководство по быстрому запуску , и Рикардо написал хороший use-me в своем календаре появления на 2009 год

Из руководства по быстрому запуску:

  use strict;
  use Email::Sender::Simple qw(sendmail);
  use Email::Simple;
  use Email::Simple::Creator;

  my $email = Email::Simple->create(
    header => [
      To             => '"Xavier Q. Ample" <x.ample@example.com>',
      From           => '"Bob Fishman" <orz@example.mil>',
      Subject        => "don't forget to *enjoy the sauce*",
      'Content-Type' => 'text/html', 
    ],
    body => "<p>This message is short, but at least it's cheap.</p>",
  );
  sendmail($email);
10 голосов
/ 12 апреля 2010

Тип содержимого должен быть частью почтового заголовка. Прямо сейчас это часть почтового тела. Заголовок отделен от тела двойной новой строкой. Таким образом, удаление второго символа новой строки после заголовка темы должно устранить проблему неправильного толкования типа контента.

3 голосов
/ 12 апреля 2010

Вы не должны говорить с sendmail напрямую через канал. Вместо этого используйте правильный модуль CPAN.

E-mail :: Отправитель является примером.

Mail :: Sender имеет специальное руководство по отправке HTML-сообщений

2 голосов
/ 13 апреля 2010

Если вы просто генерируете электронные письма, и вам не нужна огромная надежность или настройка, вы всегда можете просто пойти по быстрому пути ...

use Email::Stuff;

my $html = <<'END_HTML';
<html>
  ...
</html>
END_HTML

Email::Stuff->to('"Xavier Q. Ample" <x.ample@example.com>')
            ->from('"Bob Fishman" <orz@example.mil>')
            ->subject("Don't forget to *enjoy the sauce*")
            ->html_body($body)
            ->send;
1 голос
/ 10 августа 2017

Вы можете использовать E-mail :: MIME

    my $message = Email::MIME->create(
    header_str => [
      From    => 'no-reply@example.com',
      To      => $address,
      Subject => encode_mimewords($subject,
        Charset => 'utf-8', Encoding => 'B'),
      'Content-Type' => 'text/html',
    ],
    attributes => {
      encoding => 'base64',
      charset  => 'UTF-8',
    },
    body_str => $message_body,
  );
  sendmail($message);
1 голос
/ 31 марта 2013

У меня была проблема при отправке составного сообщения MIME из Perl с использованием sendmail.

После нескольких часов разочарования я обнаружил, что все сообщение нужно было в переменной с одним оператором отправить сообщение отправить. Так, например, если ваше сообщение полностью содержится в переменная с именем $ email_msg, отправка сообщения через sendmail будет выглядеть как:

$mailprog = '/usr/sbin/sendmail';
open(MAIL,"|$mailprog -t");
print MAIL $email_msg;
close MAIL;

Это работает, в то время как многие "print MAIL" сообщения содержат "" похоже, отправляет почтовое сообщение, которое некоторые почтовые программы могут обработать как положено.

Это использует Perl 5.8.8 на сервере CentOS.

0 голосов
/ 14 октября 2011

Использование html тэга "pre" будет простым способом отправить скрипт
вывод в электронном письме HTML.

    open(MAIL, "|/usr/sbin/sendmail -t");
    print MAIL "To: $EMAIL\n";
    print MAIL "From: $FROM\n";
    print MAIL "Subject: $SUBJECT";
    print MAIL "Content-Type: text/html; charset=ISO-8859-1\n\n";
    print MAIL < pre >\n$mailoutput< /pre >\n;
    close(MAIL);

Это позволит вам сделать все форматирование в вашем скрипте и будет
получить тот же вывод в электронной почте, что и на экране. [как вы знаете, убедитесь
без пробела до и после "pre"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...