从网站打开包含Outlook的现有电子邮件

时间:2011-12-02 12:25:16

标签: c# html outlook exchangewebservices

我们正在将某些电子邮件从Exchange Server的特定收件箱保存到某种跟踪系统。用户使用浏览器查看此跟踪系统。

我现在要做的是在网页上生成链接,当然在客户端上打开Outlook 2010中的现有电子邮件。

要生成此链接,我将获得电子邮件/项目的所有必要信息(使用Microsoft.Exchange.WebServices)。

那怎么做?

好的,到目前为止: 将ewsId(交换服务器上的邮件ID)从Exchange服务器转换为outlook的entryid。这是通过使用EWS的ConvertId方法完成的。

现在我遇到的问题是,当我尝试使用outlook加载邮件时出现错误“无法打开元素。再试一次”。

2 个答案:

答案 0 :(得分:1)

嗨,我认为这会帮助你

基本上有三种方法可以做到这一点。

  • 使用mailto打开Outlook应用程序
  • 使用传统的SMTP发送邮件
  • 使用Outlook对象库打开Outlook以及添加的附件作为应用程序的组成部分。

使用Mailto Link

<A href=”mailto:Bob@somewhere.com
         ?Cc:Roxy@righthere.com
         &Subject:Using Mailto to send mails&Body:this is a test”>. 

这是一种俗气的做法。将属性与mailto一起传递

但是,如果要在VB.Net LinkLabel中使用它。你可以这样做

Dim strURL as String strURL = “mailto:Bob@somewhere.com
                              ?Cc:Roxy@righthere.com
                              &Subject:Using Mailto to send mails&Body:this is a test” 
Process.Start(strURL)

使用SMTP发送邮件

在开始编码之前,请确保导入相关的命名空间

Imports System.Web.Mail

这是代码

Public Function SMTPCall()
    Dim strTo As String
    Dim strFrom As String 
    Dim strBody As String 
    Dim strSubject As String 
    strTo = "Bob@somewhere.com" 

    'Make sure you set the from address, 
    'some SMTP servers wouldn't send a mail without the FROM address 
    strFrom = "Roxy@righthere.com" `
    strBody = "Test on Sending Mail"` 
    strSubject = "Did this mail reach you yet?" `
    SmtpMail.Send(strFrom, strTo, strSubject, strBody) `
End Function`

看起来不错,但上述两种方法的限制是您无法发送附件。如果用户想要访问Outlook通讯录并将邮件发送给附件,该怎么办?

使用MSOutlook对象库

这是使用MS Outlook对象库与VB.Net进行Outlook集成的一小段代码。

  • 首先实例化Outlook应用程序对象。
  • 确保在“项目参考”中添加参考。
  • 右键单击Solution Explorer中的References。添加“Microsoft Outlook 10.0对象库”。

    public Function OutlookCall()     '拿一个Outlook应用程序的实例     Dim oOutlook作为新的Outlook.Application()

    'Create an instance of the MailItem 
    Dim oMailitem As Outlook.MailItem`
    
    'Create an instance of the Attachment 
    Dim oAttach As Outlook.Attachment
    oMailitem = oOutlook.CreateItem(Outlook.OlItemType.olMailItem)
    oMailitem.To = “Bob@somewhere.com”
    oMailitem.Cc = “Roxy@righthere.com”
    oMailitem.Subject = "Email Integration with Outlook and VB.Net"
    
    'txtFilepath is a text box that contains the path for attachment.
    If (txtFilepath.Text = "") Then
        MsgBox ("You did not attach a file")
    Else
        'Attach the file Path to the Mail Item 
        oMailitem.Attachments.Add(txtFilepath.Text)
    End If
    
    'PING….Displays the Outlook along with the To,Cc,Subject and Attachment 
    oMailitem.Display()
    

    结束职能

您可以使用此outlook对象执行许多其他功能。希望这会有所帮助。

注意:

  • 应在计算机上安装Microsoft Outlook。
  • Microsoft Outlook被假定为默认邮件客户端应用程序。
  • 如果现有的outlook发送项目实例已在运行,它仍会创建新的邮件消息。

这个vl帮助你

答案 1 :(得分:1)

好的,我找到了一个解决方案,我的代码发布在这里:

服务器端上的

(c#with exchange webservice):

    private static String GetOutlookEntryId( EmailMessage message, ExchangeService esb ) {
        AlternateId ewsId = new AlternateId( IdFormat.EwsId, message.Id.ToString(), "email.address@test.de" );
        AlternateIdBase entryId = esb.ConvertId( ewsId, IdFormat.EntryId );
        return Base64StringToHexString( ( (AlternateId)entryId ).UniqueId );
    }

    public static String Base64StringToHexString( String base64String ) {
        byte[] bytes = System.Convert.FromBase64String( base64String );

        StringBuilder sbHexString = new StringBuilder();
        for( int i = 0; i < bytes.Length; i++ ) {
            sbHexString.Append( bytes[i].ToString( "X2" ) );
        }
        return sbHexString.ToString();
    }

在客户端(Internet Explorer,Outlook安装,vbscript):

<script language="vbscript">
sub openMailInOutlook
    mailID = "the entry id converted from exchange id on the server side"

    set olApp = createobject("Outlook.Application")

    set session = olApp.Session
    set originalMailItem = session.GetItemFromID( mailID )

    originalMailItem.Display

    set olNs = Nothing
    set olApp = Nothing
end sub