0

あるマシンで問題を返す Outlook アドイン (アプリへのメールの基本的なプッシュ) があります (他のマシンでは問題なく動作します)。エラーが発生せずに動作していなかったため、SYSTEM メニューに移動し、VSTO_SUPPRESSDISPLAYALERTS = 0 にして画面にプッシュしました。

次に同期を実行すると、次のようになりました

Object reference not set to an instance of an object.


************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at MyAppOutlook.WaitingPopup.btnSyncOutlookInboxMail_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam,     IntPtr lparam)

これがほとんどのマシンで機能するのに、このマシンでは機能しない理由についてはわかりません。プラグインがインストールされ、他のマシンと同様にこのマシンのツールバーに表示されますが、機能しません!

プラグインをインストールする前に、以下を確認して再インストールしました。

  • .net3.5 フレームワーク
  • プライマリ相互運用アセンブリ 2007

nb Outlook は 2007 年です。

リクエストに応じて、プロセスのコードは次のとおりです。

Outlook.MAPIFolder outlookSentFolder =     (Outlook.MAPIFolder)outlookObj.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);

for (int i = 1; i <= outlookSentFolder.Items.Count; i++)
{
    Outlook.MailItem mm = outlookSentFolder.Items[i] as Outlook.MailItem;
    if (mm != null)
    {
        try
        {
            DateTime StartDate = new DateTime(((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.Year, ((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.Month, ((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.Day, ((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.Hour, ((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.Minute, 0);

            if (StartDate > currentDate) // condition for current month mail sync
            {
                string attachs = "";
                for (int j = 0; j < ((Outlook.MailItem)outlookSentFolder.Items[i]).Attachments.Count; j++)
                {
                    attachs = ((Outlook.MailItem)outlookSentFolder.Items[i]).Attachments[j + 1].FileName.ToString() + "," + attachs;
                }

                ASCIIEncoding encoding = new ASCIIEncoding();
                string postData = "userDBName=" + subsDBName;
                postData += ("|MethodRequestName=addUpdateInboxMailFromOutlookToCRM");
                postData += ("|loginid=" + username);
                postData += ("|MailTo=" + ((Outlook.MailItem)outlookSentFolder.Items[i]).To);
                postData += ("|MailCC=" + ((Outlook.MailItem)outlookSentFolder.Items[i]).CC);
                postData += ("|MailFrom=" + ((Outlook.MailItem)outlookSentFolder.Items[i]).SenderEmailAddress);
                postData += ("|MailSubject=" + ((((((Outlook.MailItem)outlookSentFolder.Items[i]).Subject).Replace("|", "")).Replace("#", "")).Replace("<", "")).Replace(">", ""));
                postData += ("|MailBody=" + ((((((Outlook.MailItem)outlookSentFolder.Items[i]).Body).Replace("|", "")).Replace("#", "")).Replace("<", "")).Replace(">", ""));
                postData += ("|MailSentOn=" + StartDate.ToString("MM/dd/yyyy hh:mm:ss"));//((Outlook.MailItem)outlookSentFolder.Items[i]).SentOn.ToString());
                postData += ("|MailType=Sent");
                postData += ("|MailAttach=" + attachs);
                byte[] data = encoding.GetBytes(postData);

                // Prepare web request...
                HttpWebRequest myRequestSent = (HttpWebRequest)WebRequest.Create(reqURL + "Views/Subscription/OutlookDataService.aspx");
                myRequestSent.Method = "POST";
                myRequestSent.ContentType = "application/x-www-form-urlencoded";
                myRequestSent.ContentLength = data.Length;
                Stream newStream = myRequestSent.GetRequestStream();
                // Send the data.
                newStream.Write(data, 0, data.Length);
                newStream.Close();

                WebResponse responseHtmlSent = myRequestSent.GetResponse();
                string xmlString = "";
                using (StreamReader r = new StreamReader(responseHtmlSent.GetResponseStream()))
                {
                    xmlString = xmlString + r.ReadToEnd();
                }
                responseHtmlSent.Close();
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Warning: " + ex.Message.ToString(), "Warning");
        }
    }
}

このエラーが発生するまでに到達できたので、誰か助けてもらえますか? ただし、このエラーは通常、テーブルを誤って参照したことを意味しますが、他のほとんどのマシンではなぜ機能するのでしょうか?

ありがとう

4

1 に答える 1

0

この問題に取り組んでいる間に、try...catch ブロックをコードに追加しましたか、それとも常にそこにありましたか?

それが常にそこにあり、エラーなしで動作していなかったと言う場合、エラーはこれの外にあるに違いありません。影響を受けるユーザーが実際に送信済みメール フォルダーを持っているかどうかを確認します。

于 2011-10-27T12:59:22.483 に答える