Как я могу послать электронное письмо HTML с Perl?

Я пытаюсь послать электронное письмо 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)

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

11
задан brian d foy 13 April 2010 в 07:00
поделиться

4 ответа

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

10
ответ дан 3 December 2019 в 01:51
поделиться

Начните с Email :: Sender :: Simple или Email :: Sender .
В 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);
19
ответ дан 3 December 2019 в 01:51
поделиться

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

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;
2
ответ дан 3 December 2019 в 01:51
поделиться

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

Электронная почта :: Отправитель является примером.

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

3
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: