捕获传入的电子邮件并将其发送到Web服务(而不仅仅是邮件服务器)

时间:2016-11-06 09:57:31

标签: ajax email imap

我想抓住传入的电子邮件并向他们发送网络服务(而不仅仅是邮件服务器)。

-

经过一番搜索,我发现了一种通过民意调查获取新电子邮件的方法 - 见下文:这可能对其他人有所帮助。有没有办法通过SMTP接收邮件?也许是通过ISAPI ???

using Limilabs.Mail;
using Limilabs.Client.IMAP;

public ActionResult checkIMAPmail()
{
    string rval = "not a sausage";

    using (Imap imap = new Imap())
    {
        imap.Connect(<mail server>);
        imap.Login(<username>, <password>);

        imap.SelectInbox();
        List<long> uids = imap.Search(Flag.Unseen);

        foreach (long uid in uids)
        {
            byte[] ourBytes = imap.GetMessageByUID(uid);
            IMail email = new MailBuilder().CreateFromEml(ourBytes);

            rval = email.Subject + " [" + email.From + "][" + email.Text + "]";
        }
        imap.Close();
    }

    return Content(rval, "text/html");
}

另见http://stackoverflow.com/questions/670183/accessing-imap-in-c-sharp 对于其他IMAP程序包,请注意上面使用byte[]的更改。

鉴于Limilabs.Mail是付费服务,我最终使用了MailKit:

using MailKit;
public int checkIMAPmail()
{
    int numEmails = 0;

    try {
        using (var client = new MailKit.Net.Imap.ImapClient())
        {
            client.ServerCertificateValidationCallback = (s, c, h, e) => true;
            client.Connect(ourSmtpClient);

            // disable the XOAUTH2 authentication mechanism.
            client.AuthenticationMechanisms.Remove("XOAUTH2");

            client.Authenticate(ourSmtpAdminUser, ourSmtpAdminUserPwd);

            // The Inbox folder is always available on all IMAP servers...
            var inboxFolder = client.Inbox;
            var savedFolder = client.GetFolder("saved");

            inboxFolder.Open(FolderAccess.ReadWrite);

            for (int ii = 0; ii < inboxFolder.Count; ii++)
            {
                var query = MailKit.Search.SearchQuery.NotSeen;

                foreach (var uid in inboxFolder.Search(query))
                {
                    var thisMsg = inboxFolder.GetMessage(uid);

                    string thisDate = notNullString(thisMsg.Date);
                    string thisSubject = notNullString( thisMsg.Subject);
                    string thisBody = notNullString(thisMsg.GetTextBody(0));   // plain text

                    string thisFromName = "";
                    string thisFromEmail = "";

                    if ( thisMsg.From != null)
                    {
                        // just get the first
                        foreach( var mb in thisMsg.From.Mailboxes)
                        {
                            thisFromName = notNullString( mb.Name);
                            thisFromEmail = notNullString( mb.Address);
                            break;
                        }
                    }

                    numEmails += 1;

                    // move email to saved
                    inboxFolder.MoveTo(uid, savedFolder);
                }
            }
            client.Disconnect(true);
        }
    }
    catch (Exception exc)
    {
        log2file("checkIMAPmail Error: " + exc.ToString());
    }

    return numEmails;
}

0 个答案:

没有答案