Как я могу отправить 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)
Это правильный способ сделать это? По какой-то причине он не работает. Благодарим за помощь.
Ответы
Ответ 1
Тип содержимого должен быть частью почтового заголовка. Сейчас это часть тела почты. Заголовок отделен от тела двойной новой строкой. Таким образом, удаление второй строки новой строки после заголовка темы должно устранить проблему типа содержимого, которая не будет правильно интерпретироваться.
Ответ 2
Начните с 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" <[email protected]>',
From => '"Bob Fishman" <[email protected]>',
Subject => "don't forget to *enjoy the sauce*",
'Content-Type' => 'text/html',
],
body => "<p>This message is short, but at least it cheap.</p>",
);
sendmail($email);
Ответ 3
Вы не должны разговаривать напрямую с sendmail через канал. Вместо этого используйте правильный модуль CPAN.
Email::Sender является примером.
Mail:: Sender имеет специальное руководство по отправке сообщений HTML
Ответ 4
Если вы просто генерируете spewy электронные письма, и вам не нужна массовая надежность или настройка, вы всегда можете просто воспользоваться ярлыком...
use Email::Stuff;
my $html = <<'END_HTML';
<html>
...
</html>
END_HTML
Email::Stuff->to('"Xavier Q. Ample" <[email protected]>')
->from('"Bob Fishman" <[email protected]>')
->subject("Don't forget to *enjoy the sauce*")
->html_body($body)
->send;
Ответ 5
У меня возникла проблема при отправке MIME-сообщения с Perl с использованием sendmail.
После нескольких часов разочарования я обнаружил, что все сообщение
должен быть в переменной с одним выражением для отправки сообщения
отправитьmail. Так, например, если ваше сообщение полностью содержится в
переменная с именем $email_msg, отправив сообщение через sendmail, будет выглядеть
как:
$mailprog = '/usr/sbin/sendmail';
open(MAIL,"|$mailprog -t");
print MAIL $email_msg;
close MAIL;
Это работает, при использовании большого количества сообщений "print MAIL" ""
похоже, отправляют почтовое сообщение, которое могут обрабатывать некоторые почтовые программы, как ожидалось.
Это использует Perl 5.8.8 на сервере CentOS.
Ответ 6
Вы можете использовать Email:: MIME
my $message = Email::MIME->create(
header_str => [
From => '[email protected]',
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);
Ответ 7
Использование html-тега "pre" будет простым способом отправки script
вывода в электронной почте 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);
Это позволит вам сделать все форматирование в script и будет
получить тот же вывод в электронной почте, что и на экране. [как вы знаете, убедитесь, что
нет пробела до и после "pre" ]