我现在使用的代码是
try
{
//using MailKit.Net.Pop3;
string pathLog = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
string fileNameLog = Path.Combine(pathLog, "pop3.txt");
using (var client = new Pop3Client(new ProtocolLogger(fileNameLog)))
//using (var client = new Pop3Client(new ProtocolLogger("pop3.log")))
{
strProgress = strProgress + "c";
client.Connect("outlook.office365.com", 995, SecureSocketOptions.SslOnConnect); //POP3 port is 995
strProgress = strProgress + "d";
client.Authenticate("xxx", "yyy");
strProgress = strProgress + "e";
for (int i = 0; i < client.Count; i++)
{
strProgress = strProgress + "f";
var message = client.GetMessage(i);
strProgress = strProgress + "g";
//Write the message to a file
message.WriteTo(string.Format("{0}.msg", i)); //<<<<<<<<<error here
numCountEmailsDownloaded = numCountEmailsDownloaded + 1;
}
client.Disconnect(true);
}
}
catch (Exception ex)
{
Toast.MakeText(this, ex.Message + "nnStopped after " + strProgress, ToastLength.Long).Show();
}
我得到一个错误消息,说"访问路径"/0.msg"被拒绝。在abcdefg之后停止(我使用strProgress来标记错误所在)。
我已经尝试将电子邮件正文作为字符串,但错误消息说'不要使用字符串来序列化…使用WriteTo代替',除了它没有告诉我如何处理它,即使它工作。收到电子邮件,然后想知道他们说了什么,这种想法一定很常见,但网上的许多其他问题和答案似乎认为这并不值得详细说明。我如何从上面提取电子邮件正文?谢谢你。
您正在尝试将消息写入当前工作目录中的文件。这很可能是应用程序的路径。
应用程序通常安装在Program Files
文件夹下。普通用户没有权限写入该文件夹。
您需要使用不同的路径来存储您的文件。例如,在LocalApplicationData
文件夹下的某个地方,您正在使用您的日志文件。
我应该在哪里存储我的数据?
我已经尝试过将电子邮件正文作为字符串
如果这是你真正想要的,也许可以这样替换行:
string messageBody = message.GetTextBody(MimeKit.Text.TextFormat.Plain);
,根据文档中的MimeMessage类型。查看TextFormat的更多选项:
http://www.mimekit.net/docs/html/T_MimeKit_Text_TextFormat.htmstring messageBody = message.TextBody;
在这两种情况下,这都是在MIME消息中寻找Text
选项。现在发现文本格式不存在的消息比较常见,并且消息只包含HTML内容体。在这种情况下,您需要知道如何检查文本和回退到HTML(反之亦然)。
否则,建议文件权限的答案和注释听起来很正确。