我尝试使用包含变音符号的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中编码?
答案 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)
并导致降级。