我正在编写Windows Store应用程序的类,它可以连接到imap.gmail.com,查找特定消息并从中下载电子邮件附件。我决定编写自己的课程,因为找不到任何适用于Windows应用商店的解决方案。连接到Windows Store应用程序中的imap.gmail.com
即使连接imap服务器,我也有问题,我使用StreamSocket,并不能理解,我做错了什么。这是我的代码:
public sealed class GmailAttachmentDownloader
{
private HostName HostName;
private StreamSocket Socket;
private String AccessToken;
private String LoginName;
private DataWriter Writer;
private DataReader Reader;
public GmailAttachmentDownloader(String loginName, String accessToken)
{
HostName = new HostName("imap.gmail.com");
LoginName = loginName;
AccessToken = accessToken;
}
private async Task<bool> Connect()
{
Socket = new StreamSocket();
try
{
await Socket.ConnectAsync(HostName, "993", SocketProtectionLevel.SslAllowNullEncryption);
}
catch
{
return false;
}
return true;
}
private async Task<bool> Write(String msg)
{
if (Socket == null)
if (! await Connect())
throw new Exception("Could not connect to imap.gmail.com");
try {
using (Writer = new DataWriter(Socket.OutputStream))
{
Writer.WriteString(msg);
await Writer.StoreAsync();
}
}
catch
{
return false;
}
return true;
}
private async Task<String> Read()
{
if (Socket == null)
if (!await Connect())
throw new Exception("Could not connect to imap.gmail.com");
String data;
using(Reader = new DataReader(Socket.InputStream))
{
Reader.InputStreamOptions = InputStreamOptions.Partial;
await Reader.LoadAsync(1024);
data = Reader.ReadString(Reader.UnconsumedBufferLength);
}
return data;
}
public async void Login()
{
String data;
data = await Read();
await Write("a1 AUTHENTCATE XOAUTH2 " + EncodeTo64("user=" + LoginName + "\x01auth=Bearer " + AccessToken + "\x01\x01\r\n"));
data = await Read();
}
static public string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes
= System.Text.UTF8Encoding.UTF8.GetBytes(toEncode);
string returnValue
= System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
static public string DecodeFrom64(string encodedData)
{
byte[] encodedDataAsBytes
= System.Convert.FromBase64String(encodedData);
string returnValue =
System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes, 0, encodedDataAsBytes.Count());
return returnValue;
}
}
任何人都可以帮助我吗?我试图在网络和微软教程中搜索,我也发现this的问题,但它并没有太大的帮助。
UPD:对不起,在我在谷歌搜索异常后,我发现,这个问题是在杀毒软件,当我关闭杀毒软件时,一切正常。如此不同的问题:如何处理它?我不想告诉我的朋友“关闭你的杀毒软件,所以我的程序可以运行”?
究竟是什么问题?你有错误吗? – vcsjones
在连接函数我捕获“一个套接字操作尝试到一个无法访问的主机(异常从HRESULT:0x80072751)”异常 – imslavko