在 Windows 中的 Windows 移动应用程序中发送邮件 [英] Sending mail in Windows mobile application in Windows

查看:54
本文介绍了在 Windows 中的 Windows 移动应用程序中发送邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Windows Mobile 应用程序的新手.在我的项目中,我想使用 microsoft.windowsmobile.pocketoutlook 发送电子邮件.到目前为止,我有以下代码:

I am new to Windows Mobile Application. In my project, I want to send emails using microsoft.windowsmobile.pocketoutlook. I have the following code so far:

private void btnsubmit_Click(object sender, EventArgs e)
{
    try
    { 
        totleave();
        OutlookSession ol = new OutlookSession();
        EmailMessage em = new EmailMessage();
        //Recipient  s1 = em.From;
        //Console.WriteLine(s1);
        Recipient r = new Recipient("iyalarasi.r", "iyalarasi.r@winxsolutions.com");
        em.To.Add(r);
        em.Subject = "Request For Leave";
        em.BodyText =txtename.Text +"(Emp id:"+txteno.Text+ ")" + " request "+ cb1.SelectedItem.ToString()+" leave from "+dtpfrom .Value
            .ToShortDateString ()+" to "+dtpto .Value.ToShortDateString ()  + "\n The reason is " + txtreason.Text;
        EmailAccount ea = ol.EmailAccounts[0];
        ea.Send(em);
        // em.Send("iyalarasi.r");//Account name in outlook
        //MessagingApplication.Synchronize("iyalarasi.r");
        MessageBox.Show("mail sent");
        f2.Show();
        f2.lblmsg.Text = "You have Applied Leave";
    }
    catch (PocketOutlookException ex)
    {
        lblmsg1.Text = ex.ToString();
    }
    catch (Exception e1)
    {
        lblmsg1.Text = e1.ToString();
    }
}

使用此代码,电子邮件会出现在发件箱中,但不会出现在收件箱中.使用 Gmail,它显示以下消息:

With this code, emails appear in the outbox, but never appears in the inbox. Using Gmail, It shows the following message:

无法发送消息.检查您是否有网络覆盖,以及您的帐户信息是否正确,然后重试.

Messages could not be sent. Check that you have network coverage, and that your account information is correct, and then try again.

我的帐户信息是正确的.这是怎么回事?

My account information is correct. What is going on?

推荐答案

我已经使用 POOM 从 Windows Mobile 设备发送电子邮件:

I already use POOM to send eMail from Windows Mobile devices:

我使用代码遍历可用的 Outlook 电子邮件帐户.字符串 sMailAccount 具有 PocketOuttlook 中显示的帐户名称,例如Google Mail":

I use code to iterate thru the available outlook eMail accounts. The string sMailAccount has the name of the account as displayed in pocketOuttlook, for example "Google Mail":

sendMail 类的类代码...

class code of sendMail class...

    public sendMail(string sMailAccount)
    {
        session = new OutlookSession();
        //eMail = new EmailMessage();
        bool bFound = false;
        foreach (Account acc in session.EmailAccounts)
        {
            System.Diagnostics.Debug.WriteLine(acc.Name);
            if (acc.Name == sMailAccount)
                bFound = true;
        }
        if (bFound)
            account = session.EmailAccounts[sMailAccount];
        if (account != null)
            _bIsValidAccount = true;
    }
    ...

我的代码用于向收件人发送图像:

My code was used to send images to recipients:

    public bool send(string sImagePath)
    {
        if (account == null)
            return false;
        try
        {
            eMail = new EmailMessage();
            rcp = new Recipient(_to);
            eMail.To.Add(rcp);
            eMail.Subject = "Visitenkarten";
            eMail.BodyText = "VCard " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\r\nsent from eMDI2Mail";

            attachement = new Attachment(sImagePath);
            eMail.Attachments.Add(attachement);                
            eMail.Send(account);                
            //account.Send(eMail);
            if (this._syncImmediately)
            {
                if (this.account != null)
                    Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(this.account);
            }
            return true;
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception in send(): " + ex.Message);
        }
        return false;
    }

另一个需要了解的问题是 POutlook 不会立即发送消息.因此,我引入了一个名为 _syncImmediately 的变量.如果这是真的,Outlook 将立即发送邮件.如果没有,我提供另一个名为 syncNow() 的函数:

Another issue to know about is that POutlook will not send messages immediately. Therefor I introduced a var called _syncImmediately. If this is true, Outlook will send the message immediately. If not, I offer another function called syncNow():

    /// <summary>
    /// sync eMail in outlook
    /// </summary>
    /// <param name="pHandle">handle to forground window</param>
    public void syncNow(IntPtr pHandle)
    {
        if (this.account != null)
        {
            Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(this.account);
            SetForegroundWindow(pHandle);
        }
    }

SetForeGroundWindow() 用于将我们带回应用程序.

The SetForeGroundWindow() is used to bring us back to the application.

这是整个班级:

    using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

using System.Runtime.InteropServices;

using Microsoft.WindowsMobile.PocketOutlook;

namespace eMdiMail
{
    class sendMail:IDisposable
    {
        [DllImport("coredll", EntryPoint = "SetForegroundWindow")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);

        OutlookSession session;
        public EmailAccount account;
        EmailMessage eMail;
        public String _to = "TheRecipient@intermec.com";
        Attachment attachement;
        Recipient rcp;

        bool _syncImmediately = false;
        public bool syncImmediately
        {
            get { return _syncImmediately; }
            set { _syncImmediately = value; }
        }
        bool _bIsValidAccount = false;
        public bool bIsValidAccount
        {
            get
            {
                return _bIsValidAccount;
            }
        }
        public bool setAccount(string sMailAccount)
        {
            session.Dispose();
            session = new OutlookSession();
            //eMail = new EmailMessage();
            bool bFound = false;
            foreach (Account acc in session.EmailAccounts)
            {
                if (acc.Name == sMailAccount)
                {
                    account = session.EmailAccounts[sMailAccount];
                    bFound = true;
                }
            }
            return bFound;
        }
        public sendMail(string sMailAccount)
        {
            session = new OutlookSession();
            //eMail = new EmailMessage();
            bool bFound = false;
            foreach (Account acc in session.EmailAccounts)
            {
                System.Diagnostics.Debug.WriteLine(acc.Name);
                if (acc.Name == sMailAccount)
                    bFound = true;
            }
            if (bFound)
                account = session.EmailAccounts[sMailAccount];
            else
            {
                if(this.createAccountGoogle())
                    account = session.EmailAccounts[sMailAccount];
            }
            if (account != null)
                _bIsValidAccount = true;
        }
        public sendMail()
        {
            session = new OutlookSession();
            //eMail = new EmailMessage();
            bool bFound = false;
            foreach (Account acc in session.EmailAccounts)
            {
                System.Diagnostics.Debug.WriteLine(acc.Name);
                if (acc.Name == "Google Mail")
                    bFound = true;
            }
            if (bFound)
                account = session.EmailAccounts["Google Mail"];
            else
            {
                if(this.createAccountGoogle())
                    account = session.EmailAccounts["Google Mail"];
            }
            if (account != null)
                _bIsValidAccount = true;
        }
        /// <summary>
        /// sync eMail using send and recv in foreground
        /// </summary>
        public void syncNow()
        {
            if (this.account != null)
                Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(this.account);
        }
        /// <summary>
        /// sync eMail in outlook
        /// </summary>
        /// <param name="pHandle">handle to forground window</param>
        public void syncNow(IntPtr pHandle)
        {
            if (this.account != null)
            {
                Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(this.account);
                SetForegroundWindow(pHandle);
            }
        }
        public bool send(string sImagePath)
        {
            if (account == null)
                return false;
            try
            {
                eMail = new EmailMessage();
                rcp = new Recipient(_to);
                eMail.To.Add(rcp);
                eMail.Subject = "Visitenkarten LogiMAT";
                eMail.BodyText = "LogiMat " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\r\nsent from eMDI2Mail";

                attachement = new Attachment(sImagePath);
                eMail.Attachments.Add(attachement);                
                eMail.Send(account);                
                //account.Send(eMail);
                if (this._syncImmediately)
                {
                    if (this.account != null)
                        Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(this.account);
                }
                return true;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception in send(): " + ex.Message);
            }
            return false;
        }

        public void Dispose()
        {
            if (account != null)
                account.Dispose();
            if (session != null)
                session.Dispose();
        }

        public bool createAccountHotmail()
        {
            XMLConfig.Settings sett = new XMLConfig.Settings();

            return XMLConfig.DMProcessConfig.ProcessXML(sett.appPath + "hotmail.xml");
        }
        public bool createAccountGoogle(){
            XMLConfig.Settings sett= new XMLConfig.Settings();

            return XMLConfig.DMProcessConfig.ProcessXML(sett.appPath + "gmail.xml");
/*
            bool bRet = false;
            string strTemp = "";
            strTemp += "<wap-provisioningdoc>\r\n";
            strTemp += "  <characteristic type=\"EMAIL2\" recursive=\"true\">\r\n";
            strTemp += "    <characteristic type=\"{D45D5BE0-B96C-87A5-60B8-A59B69C733E4}\">\r\n";
            strTemp += "      <parm name=\"SERVICENAME\" value=\"Google Mail\" />\r\n";
            strTemp += "      <parm name=\"SERVICETYPE\" value=\"IMAP4\" />\r\n";
            strTemp += "      <parm name=\"INSERVER\" value=\"imap.googlemail.com\" />\r\n";
            strTemp += "      <parm name=\"AUTHNAME\" value=\"YourName@googlemail.com\" />\r\n";
            strTemp += "      <parm name=\"DOMAIN\" value=\"\" />\r\n";
            strTemp += "      <parm name=\"OUTSERVER\" value=\"smtp.googlemail.com\" />\r\n";
            strTemp += "      <parm name=\"REPLYADDR\" value=\"YourName@googlemail.com\" />\r\n";
            strTemp += "      <parm name=\"SMTPALTAUTHNAME\" value=\"YourName@googlemail.com\" />\r\n";
            strTemp += "      <parm name=\"SMTPALTDOMAIN\" value=\"\" />\r\n";
            strTemp += "      <parm name=\"NAME\" value=\"YourName 2011\" />\r\n";
            strTemp += "      <parm name=\"LINGER\" value=\"120\" />\r\n";
            strTemp += "      <parm name=\"RETRIEVE\" value=\"2048\" />\r\n";
            strTemp += "      <parm name=\"KEEPMAX\" value=\"0\" />\r\n";
            strTemp += "      <parm name=\"DWNDAY\" value=\"3\" />\r\n";
            strTemp += "      <parm name=\"FORMAT\" value=\"2\" />\r\n";
            strTemp += "      <parm name=\"AUTHREQUIRED\" value=\"1\" />\r\n";
            strTemp += "      <parm name=\"AUTHSECRET\" value=\"YourPassword\"/>\r\n";
            strTemp += "    </characteristic>\r\n";
            strTemp += "  </characteristic>\r\n";
            strTemp += "</wap-provisioningdoc>";

            return bRet;
*/
        }
    }
}

如您所见,该课程还能够通过给定的 XML WAP 配置文件创建电子邮件帐户.

As you can see, the class is also able to create eMail accounts by a given XML WAP Provisioning file.

问候

约瑟夫

顺便说一句:该应用程序旨在使用 Intermec eMDI 技术在展会上制作名片的特殊照片.然后应将这些信息直接发送给秘书以创建这些线索.

BTW: the app was designed to make a special photo of business cards at fair using Intermec eMDI technology. These should be then send directly to a secretary to create leads of these.

好的,为了更简单明了:1. 为了能够使用 POutlook,您需要对 poutlook 会话的引用.2.为了能够通过代码发送电子邮件,您需要指定poutlook必须使用的邮件帐户.3.然后创建一个电子邮件对象并填写字段4.最后使用email对象的send方法和已有的账号对象

OK, to make more simple and clear: 1. To be able to use POutlook you need a reference to an poutlook session. 2. To be able to send an email via code, you need to specify the mail account that poutlook has to use. 3. Then create an eMail object and fill the fields 4. Finally use the send method of the email object with the existing account object

更详细

创建会话对象

      OutlookSession session = new OutlookSession();

指定用于发送电子邮件的帐户.字符串必须与您定义的完全匹配PocketOutlook 电子邮件帐户名称.如果你使用一个数字作为参考,你不能确定,哪个帐户已选择.

Specify the account to use for the email sending. The String has to exactly match your defined PocketOutlook eMail account name. If you use a number for reference, you cannot be sure, which account is choosen.

      EmailAccount account = session.EmailAccounts[sMailAccount];

检查退回的帐户.它是NULL吗?现在创建一个新的 EMailMessage(与 TextMessage(SMS) 相反)

Check the returned account. Is it NULL? Now create a new EMailMessage (in contrast to a TextMessage(SMS))

      EmailMessage eMail = new EmailMessage();

然后填写EmailMessage对象的字段

and then fill the fields of the EmailMessage object

        Recipient rcp = new Recipient(_to);
        eMail.To.Add(rcp);
        eMail.Subject = "Visitenkarten";
        eMail.BodyText = "Enter some eMail text to send";

最后发送电子邮件:

     eMail.Send(account); 

由于 poutlook 通常会定期在后台发送电子邮件,因此您可能希望让poutlook 立即发送邮件.如果是这样,您可以使用该代码:

as poutlook does normally send eMail in background periodically at some time, you may want to let poutlook send the mail immediately. If so, you can use that code:

     Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(account);

这将使 poulook 立即同步指定帐户的电子邮件,而且还带来了前景窗口到前景.

this will make poulook sync the email of the specified account immediately, but also brings the outlook window to foreground.

这是否简单明了?

这篇关于在 Windows 中的 Windows 移动应用程序中发送邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆