2012-06-07 3 views
2

Я пытаюсь использовать Perl для отправки сообщения электронной почты. В основном у меня есть сценарий Perl, который выводит отчет в хорошем формате. Я хочу, чтобы этот отчет отправлялся по электронной почте. Как я могу это сделать?Отправка электронной почты с помощью Perl

+0

[? Что такое лучший модуль Perl для отправки электронной почты] (HTTP : //stackoverflow.com/questions/338896/what-is-the-best-perl-module-for-sending-email), [Какой пакет из CPAN следует использовать для отправки почты?] (http: // stackoverflow. com/questions/2919493/which-package-from-cpan-should-i-use-to-send-mail) – daxim

+0

CPAN - ваш френ d, новый или старый для Perl. Попробуйте, например, [Email: Sender] (https://metacpan.org/module/Email::Sender). Хорошая документация в [руководстве по быстрому запуску] (https://metacpan.org/module/Email::Sender::Manual::QuickStart). – asjo

+0

Использование Perl SMTP http://perldoc.perl.org/Net/SMTP.html –

ответ

3

MIME::Lite - сильный модуль, используемый многими. Он прост в использовании, в том числе, если вы хотите прикрепить документы.

use MIME::Lite; 
my $msg = MIME::Lite->new(
    From => $from, 
    To  => $to, 
    Subject => $subject, 
    Type => 'text/plain', 
    Data => $message, 
); 
$msg->send; 

Поскольку он использует sendmail по умолчанию (в отличие от SMTP), вам даже не нужно настраивать.

+6

Я знаю, что этот ответ старый, но документы MIME :: Lite теперь говорят: 'ПОДОЖДИТЕ! MIME :: Lite не рекомендуется его текущим поддерживающим устройством. Существует несколько альтернатив, таких как Email :: MIME или MIME :: Entity и Email :: Sender, которые вы, вероятно, должны использовать вместо этого. MIME :: Lite продолжает набирать странные отчеты об ошибках и не получает большого количества рефакторинга из-за доступности лучших альтернатив. Пожалуйста, рассмотрите возможность использования чего-то еще. ' – ThisSuitIsBlackNot

3

Стоит отметить, что если вы будете иметь внешний вид на вашей машине и CPAN модуль Outlook:

# create the object 
use Mail::Outlook; 
my $outlook = new Mail::Outlook(); 

    # start with a folder 
    my $outlook = new Mail::Outlook('Inbox'); 

    # use the Win32::OLE::Const definitions 
    use Mail::Outlook; 
    use Win32::OLE::Const 'Microsoft Outlook'; 
    my $outlook = new Mail::Outlook(olInbox); 

    # get/set the current folder 
    my $folder = $outlook->folder(); 
    my $folder = $outlook->folder('Inbox'); 

    # get the first/last/next/previous message 
    my $message = $folder->first(); 
    $message = $folder->next(); 
    $message = $folder->last(); 
    $message = $folder->previous(); 

# read the attributes of the current message 
my $text = $message->From(); 
$text = $message->To(); 
$text = $message->Cc(); 
$text = $message->Bcc(); 
$text = $message->Subject(); 
$text = $message->Body(); 
    my @list = $message->Attach(); 

    # use Outlook to display the current message 
    $message->display; 


    # Or use a hash 
    my %hash = (
    To  => '[email protected]', 
    Subject => 'Blah Blah Blah', 
    Body => 'Yadda Yadda Yadda', 
); 

    my $message = $outlook->create(%hash); 
    $message->display(%hash); 
    $message->send(%hash); 

Обратите внимание, что .invalid TLD не является реальным, так что адрес выше, не доставит. В любом случае, я поставил здесь достойное объяснение вещей в модуле - это отправляет сообщение!

+0

@Grep Bacon Я пробовал этот код, но ошибка' Невозможно вызвать метод «От» по неопределенному значению по строке mail.pl 24. «В этом коде. Что я могу сделать? – mkHun

+0

@Hussain Не запускайте этот код точно так же, как есть - это всего лишь часть CPAN, показывающая все методы, которые вы можете сделать. До строки 24 код запускается первым(), next(), last() AND previous(). Вы не должны запускать всех этих сторонников ... может быть, он пытается получить доступ к чему-либо без функции From(). Кроме того, перед тем, как он дважды выбирает текущую папку ... может также очистить ее до JUST, захватить «Входящие». – PinkElephantsOnParade

+0

Привет, У меня возникла проблема с этим, кажется, что '$ outlook = new Mail :: Outlook()' возвращает undef ... почему? Я уже установил модуль, и у меня есть Outlook 2007 ... как я могу создать объект $ outlook? – catzilla

4

Если машина не имеет Sendmail настроен, я обычно использую Mail::Sendmail

use Mail::Sendmail; 

%mail = (smtp => 'my.isp.com:25', 
     to  => '[email protected]', 
     from => '[email protected]', 
     subject => 'Automatic greetings', 
     message => 'Hello there'); 

sendmail(%mail) or die; 
+0

+1 :: Это работает для меня. Я использовал 'localhost: 25' –

0

простейшим способом без библиотек CPAN:

#!/usr/bin/perl 

$to = '[email protected]';  # to address 
$from = '[email protected]'; # from address 
$subject = 'subject';   # email subject 
$body = 'Email message content';# message 

open(MAIL, "|/usr/sbin/sendmail -t");  
print MAIL "To: $to\n"; 
print MAIL "From: $from\n"; 
print MAIL "Subject: $subject\n\n"; 
print MAIL $body;  
close(MAIL); 

print "Email Sent Successfully to $to\n"; 
Смежные вопросы