既に POOM を使用して、Windows Mobile デバイスから電子メールを送信しています。
コードを使用して、利用可能な Outlook 電子メール アカウントを反復処理します。文字列 sMailAccount には、「Google Mail」など、pocketOuttlook に表示されるアカウントの名前が含まれます。
sendMail クラスのクラス コード...
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;
}
...
私のコードは、画像を受信者に送信するために使用されました。
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;
}
知っておくべきもう 1 つの問題は、POutlook がメッセージをすぐに送信しないことです。そのため、_syncImmediately という var を導入しました。これが true の場合、Outlook はメッセージをすぐに送信します。そうでない場合は、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() を使用して、アプリケーションに戻ります。
クラス全体は次のとおりです。
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 プロビジョニング ファイルによって電子メール アカウントを作成することもできます。
よろしく
ヨーゼフ
ところで: このアプリは、Intermec eMDI テクノロジを使用して、見本市で名刺の特別な写真を作成するように設計されています。これらは、これらのリードを作成するために秘書に直接送信する必要があります。
OK、より単純明快にするために: 1. POutlook を使用できるようにするには、poutlook セッションへの参照が必要です。2. コード経由でメールを送信できるようにするには、poutlook が使用するメール アカウントを指定する必要があります。3. 次に、eMail オブジェクトを作成し、フィールドに入力します 4. 最後に、既存のアカウント オブジェクトで電子メール オブジェクトの send メソッドを使用します
さらに詳細に
セッション オブジェクトを作成する
OutlookSession session = new OutlookSession();
メール送信に使用するアカウントを指定します。文字列は、定義済みの PocketOutlook 電子メール アカウント名と正確に一致する必要があります。参照用に番号を使用すると、どのアカウントが選択されているか確信が持てなくなります。
EmailAccount account = session.EmailAccounts[sMailAccount];
返されたアカウントを確認します。ヌルですか?ここで、新しい EMailMessage を作成します (TextMessage(SMS) とは対照的に)
EmailMessage eMail = new EmailMessage();
次に、EmailMessage オブジェクトのフィールドに入力します
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 にすぐにメールを送信させたい場合があります。その場合は、そのコードを使用できます。
Microsoft.WindowsMobile.PocketOutlook.MessagingApplication.Synchronize(account);
これにより、poulook は指定されたアカウントの電子メールをすぐに同期するようになりますが、Outlook ウィンドウも前面に表示されます。
これは明確で単純ですか?