使用Email :: Sender发送UTF-8编码的邮件

时间:2015-06-09 14:09:34

标签: perl email utf-8

我尝试使用包含变音符号的Email :: Sender发送邮件。

#!/usr/bin/perl

use strict;
use warnings;

use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP::TLS;
use Email::Simple ();
use Email::Simple::Creator ();

open(my $mailbody, "<", "mail-content");

my $smtpserver = 'smtp.gmail.com';
my $smtpport = 587;
my $smtpuser   = 'example@mail.de';
my $smtppassword = 'password';

my $transport = Email::Sender::Transport::SMTP::TLS->new({
  host => $smtpserver,
  port => $smtpport,
  username => $smtpuser,
  password => $smtppassword,
});

my $email = Email::Simple->create(
  header => [
    To      => 'example@mail.de',
    From    => 'example@mail.de',
    Subject => 'Mail',
  ],
  body => <$mailbody>,
);

sendmail($email, { transport => $transport });

收到的邮件似乎是gegrÃŒÃt而不是gegrüßt 有什么方法可以指定邮件如何在perl中编码?

3 个答案:

答案 0 :(得分:3)

你有

open(my $mailbody, "<", "mail-content");

如果文件mail-content包含UTF-8编码数据,则必须使用相应的IO层打开它:

open my $mailbody, '<:encoding(UTF-8)', 'mail-content'
    or croak ...;

此外,如果脚本的源代码包含将包含在消息中的UTF-8字符串,则必须在脚本中包含use utf8;

此外,如果任何标题字段包含UTF-8编码字符串,您还必须encode those strings

答案 1 :(得分:2)

是。在邮件中添加Content-Type行:

Content-Type: text/html; charset=UTF-8

您可能还需要在阅读邮件文件时指定输入编码:

open ( my $input, "<:encoding(UTF-8)", "Your_File" ) or die $!; 

答案 2 :(得分:0)

遇到同样的问题,可以通过添加

来解决
require Net::SMTP;

在使用Email :: Simple之前。这似乎与“解决方法”有关。在电子邮件/发件人/传输/ SMTP.pm中,它说

utf8::downgrade($next_hunk) if (Net::SMTP->VERSION || 0) < 3.07;

如果未加载Net :: SMTP,则会解析为if (0 < 3.07)并导致降级。