我想要做的是从那些尚未阅读的电子邮件中读取一种附件,例如那些 .pdf 的附件。首先,我尝试阅读一个简单的示例,但它告诉我以下消息:
服务器不接受用户凭据
而且我确定用户名和密码是正确的。
我正在测试的简单示例是这样的(这是我制作的一个类):
class ConnectPop3
{
private string username = "[email protected]";
private string password = "miclave";
private int port = 995;
private string hostname = "pop.gmail.com";
private bool useSsl = true;
public List<Message> getMensajes()
{
try
{
// El cliente se desconecta al terminar el using
using (Pop3Client client = new Pop3Client())
{
// conectamos al servidor
client.Connect(hostname, port, useSsl);
// Autentificación
client.Authenticate(username, password, OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
// Obtenemos los Uids mensajes
List<string> uids = client.GetMessageUids();
// creamos instancia de mensajes
List<Message> lstMessages = new List<Message>();
// Recorremos para comparar
for (int i = 0; i < uids.Count; i++)
{
//obtenemos el uid actual, es él id del mensaje
string currentUidOnServer = uids[i];
//por medio del uid obtenemos el mensaje con el siguiente metodo
Message oMessage = client.GetMessage(i + 1);
//agregamos el mensaje a la lista que regresa el metodo
lstMessages.Add(oMessage);
}
// regresamos la lista
return lstMessages;
}
}
catch (Exception ex)
{
//si ocurre una excepción regresamos null, es importante que cachen las excepciones, yo
//lo hice general por modo de ejemplo
return null;
}
}
}
从索引中,我这样称呼它:
protected void LeerCorreo_Click(object sender, EventArgs e)
{
ConnectPop3 oCP3 = new ConnectPop3();
//invocamos el metodo para obtener mensajes
List<OpenPop.Mime.Message> lstMensajes = oCP3.getMensajes();
//recorremos y mostramos el asunto
foreach (OpenPop.Mime.Message oMensaje in lstMensajes)
{
//Console.WriteLine(oMensaje.Headers.Subject);
MessageBox.Show(oMensaje.Headers.Subject);
}
}
我想知道如何解决服务器不接受用户凭据消息。然后我希望能够阅读收件箱中尚未阅读的邮件,但在这些邮件中,只有具有特定格式的附件。
然后我尝试了这种方式:目前我正在像这样测试它:
ImapClient ic = new ImapClient("imap.gmail.com", "[email protected]", "miclave",
AE.Net.Mail.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
System.Windows.Forms.MessageBox.Show(ic.GetMessageCount().ToString());
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
Console.WriteLine(m.Subject);
System.Windows.Forms.MessageBox.Show(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();
但我需要阅读收件箱中尚未阅读的内容,但在这种情况下,它会全部阅读。
要使用 Imap 阅读 Gmail 电子邮件,我会使用 AE.Net.Mail 库(您可以在 NuGet 中使用它),代码如下所示:
请注意,要使其正常工作,您必须打开端口 993。
编辑 以下代码获取未读电子邮件的 ID,然后获取附件的文件名:
我希望这个例子对你有所帮助。