【发布时间】:2017-09-25 15:45:41
【问题描述】:
我正在尝试发送一封电子邮件,其中包含以 utf-8 编码的俄语文本和主题。正在接收电子邮件,当我在 gmail 的 Web 界面中打开它时,一切正常。但是当我在“The bat”客户端打开邮件时,默认编码不正确(我可以手动设置为utf-8):
Subject: "Hello. Текст"
Body: "test email. Русский текст"
代替:
Subject: "Hello. Текст"
Body: "test email. Русский текст"
代码:
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP ();
use Email::Simple ();
use MIME::Base64 qw( encode_base64 );
use open ':std', ':encoding(UTF-8)';
sub send_email
{
my $email_from = shift;
my $email_to = shift;
my $subject = shift;
my $message = shift;
my $smtpserver = 'smtp.gmail.com';
my $smtpport = 465;
my $smtpuser = 'user@gmail.com';
my $password = 'secret';
my $transport = Email::Sender::Transport::SMTP->new({
host => $smtpserver,
port => $smtpport,
sasl_username => $smtpuser,
sasl_password => $password,
debug => 1,
ssl => 1,
});
my $email = Email::Simple->create(
header => [
To => $email_to,
From => $email_from,
Subject => $subject,
],
body => $message,
);
$email->header_set( 'Content-Type' => 'text/html' );
$email->header_set( 'charset' => 'UTF-8' );
sendmail($email, { transport => $transport });
}
my $body = Encode::encode('utf-8', 'test email. Русский текст');
my $subject = Encode::encode('utf-8', 'Hello. Текст');
send_email('user@gmail.com', 'user@gmail.com', $subject, $body);
如何告诉邮件客户端编码是utf-8?
【问题讨论】:
-
你试过用 utf-8 用 google web 界面发送消息,然后用“bat”打开吗?