在电子邮件申请中要求提供凭据

时间:2015-05-14 19:58:48

标签: c# visual-studio email outlook

我需要在visual studio中创建一个应用程序来检索收件箱,从交换电子邮件帐户发送邮件和附件,以及能够标记为已读和删除所述邮件(如果您愿意,可以使用类似Outlook的应用程序)

我有代码从outlook中检索收件箱和附件,但我需要将它与outlook分开,或者至少我需要它才能在向我显示消息之前询问凭据。这是我的代码:

Outlook.Application Application = new Outlook.Application();
Outlook.NameSpace OutlookNameSpace =  Application.GetNamespace("MAPI");
Outlook.MAPIFolder inbox = OutlookNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;

//Fills a listbox with the inbox messages
public void fillInboxListBox()
{    
    for (int i = 1; i <= inbox.Items.Count; i++)
    {
       //lsbxMessages is a ListBox control 
       lsbxMessages.Items.Add(((Outlook.MailItem)inbox.Items[i]).Subject);
    }                
}

//When an item on the listbox is selected, it loads the mail on a separate rich text box
private void lsbxMessages_SelectedIndexChanged(object sender, EventArgs e)
{
     //lblSubject is a label where I put the subject of the message
     lblSubject.Text = ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).Subject;

     //lblSender this is where I put the sender name and email adress         
     lblSender.Text = ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).SenderName + " <" + ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).SenderEmailAddress + ">";

     //I put the body of the email in a richtextbox         
     rtbBody.Text = ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).Body;

     //lblDateSent shows the date the message was sent
     lblDateSent.Text = ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).SentOn.ToString();

     //rtbReceiver is a rich text box where I show all the adresses the email was sent to
     rtbReceiver.Text = ((Outlook.MailItem)inbox.Items[(lsbxMessages.SelectedIndex + 1)]).To;
}

有关如何询问用户名和密码的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以通过任何要设计的对话框询问,然后必须通过NameSpace.LogOn方法将参数传递给Outlook。默认情况下,您将打开当前用户的默认配置文件。

这是一个很好的教程(虽然它只显示登录默认配置文件而不需要用户名,但是添加自己的对话框以获取用户名/密码很简单):

https://msdn.microsoft.com/en-us/library/office/ff462097.aspx

https://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.outlook._namespace.logon.aspx

另外要注意的是,如果Outlook已经运行,则无法创建另一个Outlook实例,您必须获取正在运行的应用程序的实例。 (好吧,你可以创建另一个“实例”,但它不会创建一个新的进程,它将使用现有的进程和加载的配置文件)。即便如此,我认为你不能加载多个一次配置文件。