Я пытаюсь послать электронное письмо 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)
Это - корректный способ сделать его? Это не работает по некоторым причинам.Спасибо за помощь.
Тип содержимого должен быть частью заголовка сообщения. Сейчас это часть тела почты. Заголовок отделяется от тела двойной новой строкой. Таким образом, удаление второй новой строки после заголовка темы должно решить проблему некорректной интерпретации типа контента.
Начните с 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);
Если вы просто генерируете разрозненные электронные письма и вам не нужна большая надежность или тонкая настройка, вы всегда можете просто воспользоваться быстрым путем ...
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;
На самом деле вам не следует разговаривать с sendmail напрямую через канал. Вместо этого используйте подходящий модуль CPAN.
Электронная почта :: Отправитель является примером.
Mail :: Sender имеет специальное руководство по отправке сообщений HTML.