我正在尝试建立一台服务器,其中包括处理注册的服务器。这是每个人都熟悉的标准过程:获取用户名,密码和电子邮件地址,然后将确认邮件发送到该地址,并带有包含将激活该帐户的令牌的链接。
在电子邮件中放置链接意味着以HTML格式处理电子邮件,据我所知,这是通过在电子邮件中设置内容类型标头值来完成的。我设置了一个Gmail帐户来进行发送,当我通过为自己注册一个帐户进行测试时,我确实收到了一封电子邮件...但这是一个纯HTML标记的纯文本电子邮件。
这是我用来发送电子邮件的代码:
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
namespace MyProject.Mail {
class GMailClient
{
private readonly GmailService _service;
public GMailClient(UserCredential credential)
{
var initializer = new BaseClientService.Initializer { HttpClientInitializer = credential};
_service = new GmailService(initializer);
}
public async Task SendMail(string sender, string recipient, string subject, string body) {
var fullMessage = $@"To: {recipient}
From: {sender}
Subject: {subject}
Content-Type: text/html; charset=""utf-8""
{body}";
var bytes = Encoding.UTF8.GetBytes(fullMessage);
var b64 = Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_');
var message = new Message
{
Raw = b64,
SizeEstimate = body.Length
};
await _service.Users.Messages.Send(message, "me").ExecuteAsync().ConfigureAwait(true);
}
}
}
最奇怪的是,我收到的纯文本电子邮件不是我发送的纯HTML文本。我发送的HTML消息如下所示:
<html>
<body>
<p>Hi,
<p>You're receiving this because you recently signed up for a MyProject account. Here's your confirmation link: <a href="url here">url here</a>.
<p> If you did not sign up for a MyProject account, please simply ignore this email.
</body>
</html>
但是我实际上在收件箱中收到的消息如下:
<头> <正文>
嗨,
您收到此消息是因为您最近注册了MyProject帐户。这是您的确认链接:[URL,实际上设置为超链接的格式]
如果您没有注册MyProject帐户,请忽略此电子邮件。
(请注意,奇怪的空格和缺少结束标记等。)
这使我感到困惑。知道发生了什么问题以及如何解决吗?