2013-07-11 60 views
0

我目前有一个工作的Perl代码,用我的通用主题和内容将电子邮件发送到正确的电子邮件地址。在Perl中使用NET :: SMTP发送.OFT模板

但是,目前每当有新用户启动时,我们都会启动一个预制的.oft模板,以表明他们需要知道的所有内容。 .oft存储在我们的服务器上。我想知道是否有一种方法来改变perl代码,使其成为:但使用.oft模板来制作电子邮件的其余部分?

所以基本上

$smtp = Net::SMTP->new('smtp.blah'); 
    $smtp->('[email protected]'); 
    $smtp->to('$personEmail'); 
    $smtp->data(); 
    $smtp->datasend($locationOfOftTemplate); 
    $smtp->dataend(); 
    $smtp->quit; 

回答

0

AFAIK有处理这一专有格式没有模块。而是将其转换为标准模板系统:

my $template = <<'TEMPLATE'; 
Good morning, [% name %]! 

Today is your first day at work. You have already received your universal login 
credentials: 

    [% ldap_user %] 
    [% ldap_pass %] 

It works for authenticating at the Web proxy, mail system, Jabber and internal 
services. Change the password ASAP: <[% ldap_web %]> 

-- 
Yours sincerely, the greeting daemon 
TEMPLATE 

use Text::Xslate qw(); 
my $text = Text::Xslate->new(syntax => 'TTerse')->render_string($template, { 
    name => 'New Bee', 
    ldap_user => 'nbee', 
    ldap_pass => 'CON-GLOM-O', 
    ldap_web => 'http://192.168.0.1:8080/', 
}); 

使用MIME工具包创建电子邮件。 HTML /多/附件是容易 Courriel::Builder

use Courriel::Builder; 

my $email = build_email(
    subject('Welcome'), 
    from('[email protected]'), 
    to('…'), 
    plain_body($text), 
); 

最后,使用高级别库Email::Sender,给你不错的错误检查,并允许您轻松地切换出传输发送 - 运行测试的本地交付。

use Email::Sender::Simple qw(sendmail); 
use Email::Sender::Transport::SMTP qw(); 
use Try::Tiny; 

try { 
    sendmail(
     $email, 
     { 
      transport => Email::Sender::Transport::SMTP->new({ 
       host => 'smtp.example.invalid', 
      }) 
     } 
    ); 
} catch { 
    warn "sending failed: $_"; 
}; 
+0

你确定没有这个吗?我可以将整个.oft模板解析为电子邮件主题,就像它假设的一样。我现在运行的唯一问题似乎是一个科迪问题。整个.oft机构看起来类似于这个... ÐÏà¡\t 它似乎是一个UTF-8编码问题,但我努力转换一切。 – Heuristic

+0

[开一个新主题](http://stackoverflow.com/questions/ask)为您的后续问题。在那里提供您的输入数据和代码。 – daxim