SophiaFramework UNIVERSE 5.3 |
メール送受信をするための基本的なクラスとして、以下の 3 種類のクラスが提供されます。 通常は、これらのクラスを利用してメールの送受信を行います。
表 16.3. メール送受信クラス
クラス名 | 解説 |
---|---|
SFXSMTPSender | SMTP メール送信クラスです。 |
SFXPOP3Receiver | POP3 メール受信クラスです。 |
SFXMailMessage | メールメッセージを処理するためのクラスです。 |
mif ファイルの設定 | |
---|---|
mif ファイルの特権レベル設定で「ネットワーク」の項目をオンにします。 |
SMTP / POP3 プロトコルレベルで制御を行いたい場合は、 上表のメール送受信クラスを実装している以下クラスを使用します。
表 16.4. メール送受信クラス内部実装クラス
クラス名 | 解説 |
---|---|
SFXSMTP | [内部的に利用されるクラスです] SMTP プロトコルを処理するクラスです。 |
SFXPOP3 | [内部的に利用されるクラスです] POP3 プロトコルを処理するクラスです。 |
SFXMailUtility | [内部的に利用されるクラスです] メールメッセージ作成・メール送信用ユーティリティクラスです。 |
SFXMailField | [内部的に利用されるクラスです] メールヘッダーのフィールド値をデコード/エンコードするのためのクラスです。 |
内部実装 | |||||||||
---|---|---|---|---|---|---|---|---|---|
SFXSMTPSender / SFXPOP3Receiver / SFXMailMessage クラスは、内部的に下表のクラスを使用して実装されています。
|
SFXSMTPSender クラスを使用してメールを送信する方法は以下の通りです。
例 16.16. SMTP メール送信
class MyClass { private: SFXSMTPSender _sender; XALLBACK_DECLARE_SFXSMTPSENDER(SMTPCallback) public: Void Start(Void); }; Void MyClass::Start(Void) { SFCError error; SFXMailMessage message; // メールヘッダーに From フィールドを設定する message.SetFromField("fromaddress@example.com"); // メールヘッダーに To アドレスを追加する message.AddToField("toaddress1@example.com"); message.AddToField("toaddress2@example.com"); // メールヘッダーに Subject フィールドを設定する message.SetSubjectField("Mail Subject"); // メールメッセージの本文を設定する message.SetBody("Mail test\r\nThis mail is sent by SFXSMTPSender.\r\n"); // SMTP サーバーのドメイン名(または IP アドレス)とポート番号を指定する: ドメイン名は自動解決される _sender.SetServer(SFXSocketAddress("smtpserver.example.com:25")); // SMTPCallback コールバック関数を登録し、メールメッセージを送信する // ※ メール送信の結果は SMTPCallback 関数に通知される if ((error = _sender.SendMessage(&message, XALLBACK_INTERNAL(SMTPCallback))) != SFERR_NO_ERROR) { // SMTP クライアント内でエラーが発生したとき // ※ SMTPCallback 関数は呼び出されない ... } } // メール送信の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXSMTPSENDER(MyClass, SMTPCallback, error) { if (error == SFERR_NO_ERROR) { TRACE("メールを送信しました。"); } else { TRACE("メール送信に失敗しました。エラーコード: %d", error); } }
SFXPOP3Receiver クラスを使用してメールを受信する方法は以下の通りです。
前提条件 | |
---|---|
UIDL コマンドを実装した POP3 サーバーが前提となります。 |
例 16.17. POP3 メール受信
class MyClass { private: SFXPOP3Receiver _receiver; XALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback) public: Void Start(Void); }; Void MyClass::Start(Void) { // POP3 サーバーのドメイン名(または IP アドレス)とポート番号を指定する: ドメイン名は自動解決される _receiver.SetServer(SFXSocketAddress("pop3server.example.com:110")); // ユーザー名とパスワードを設定する _receiver.SetAccount("user", "password"); // 受信したメールメッセージを POP3 サーバーから削除する場合は以下のコードを追加する // ※デフォルト設定では、受信したメールメッセージは POP3 サーバーから削除されない // _receiver.SetAutoDelete(true); // POP3Callback コールバック関数を登録し、メールメッセージを受信する // メール受信の結果は POP3Callback 関数に通知される if ((error = _receiver.Receive(XALLBACK_INTERNAL(POP3Callback))) != SFERR_NO_ERROR) { // エラーが発生したとき // ※ POP3Callback 関数は呼び出されない ... } } // メール受信の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MyClass, POP3Callback, error) { SInt32 i; if (error == SFERR_NO_ERROR) { //受信に成功した場合 // 受信したメールメッセージの配列(MailArray)を取得する SFXPOP3Receiver::MailArrayConstRef mailArray = receiver.GetReceivedMailArray(); // メールメッセージの数を表示する TRACE("received %d mails", mailArray.GetSize()); for (i = 0; i < mailArray.GetSize() ; i++) { SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i]; // メールメッセージのサイズ、一意識別子、ヘッダーと本文を表示する TRACE("%d, %s, %s", minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString()); } } }
SSL を使用する SMTP メール送信では、 SFXSMTPSender::SetSSLMode / SFXSMTPSender::SetTrustMode 関数で SSL の設定をする処理が追加で必要になります。
また、SMTP 認証を使用する SMTP メール送信では、 SFXSMTPSender::SetAuthorization 関数で認証方式を設定する処理が追加で必要になります。
例 16.18. SSL と SMTP 認証を使用する SMTP メール送信
class MyClass { private: SFXSMTPSender _sender; XALLBACK_DECLARE_SFXSMTPSENDER(SMTPCallback) public: Void Start(Void); }; // 太字の部分を追加 Void MyClass::Start(Void) { SFCError error; SFXMailMessage message; // メールヘッダーに From フィールドを設定する message.SetFromField("fromaddress@example.com"); // メールヘッダーに To フィールドを追加する message.AddToField("toaddress1@example.com"); message.AddToField("toaddress2@example.com"); // メールヘッダーに Subject フィールドを設定する message.SetSubjectField("Mail Subject"); // メールメッセージの本文を設定する message.SetBody("Mail test\r\nThis mail is sent by SFXSMTPSender.\r\n"); // SMTP サーバーのドメイン名(または IP アドレス)とポート番号を指定する: ドメイン名は自動解決される _sender.SetServer(SFXSocketAddress("smtpserver.example.com:465")); // SSL の設定 _sender.SetSSLMode(true); // SSL 接続モードを ON に設定する _sender.SetTrustMode(SSL_TRUST_MODE_FAIL); // SSL 認証モードを SSL_TRUST_MODE_FAIL に設定する // SMTP 認証方式の設定 _sender.SetAuthorization(AUTH_CRAM_MD5,"username","password"); // SMTP 認証方式を CRAM-MD5 認証に設定する // SMTPCallback コールバック関数を登録し、メールを送信する // メール送信の結果は SMTPCallback 関数に通知される if ((error = _sender.SendMessage(&message, XALLBACK_INTERNAL(SMTPCallback))) != SFERR_NO_ERROR) { // エラーが発生したとき // ※ SMTPCallback 関数は呼び出されない ... } } // メール送信の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXSMTPSENDER(MyClass, SMTPCallback, error) { if (error == SFERR_NO_ERROR) { TRACE("メールを送信しました。"); } else { TRACE("メール送信に失敗しました。 %d", error); } }
SSL を使用する POP3 メール受信では、 SFXPOP3Receiver::SetSSLMode / SFXPOP3Receiver::SetTrustMode 関数で SSL の設定をする処理が追加で必要になります。
例 16.19. SSL メール受信
class MyClass { private: SFXPOP3Receiver _receiver; XALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback) public: Void Start(Void); }; // 太字の部分を追加 Void MyClass::Start(Void) { // ユーザー名とパスワードを設定する _receiver.SetAccount("user", "password"); // POP3 サーバーのドメイン名(または IP アドレス)とポート番号を指定する: ドメイン名は自動解決される _receiver.SetServer(SFXSocketAddress("pop3server.example.com:995")); // SSL の設定 _receiver.SetSSLMode(true); // SSL 接続モードを ON に設定する _receiver.SetTrustMode(SSL_TRUST_MODE_FAIL); // SSL 認証モードを SSL_TRUST_MODE_FAIL に設定する // POP3Callback コールバック関数を登録し、メールを受信する // メール受信の結果は POP3Callback 関数に通知される if ((error = _receiver.Receive(XALLBACK_INTERNAL(POP3Callback))) != SFERR_NO_ERROR) { // エラーが発生したとき // ※ POP3Callback 関数は呼び出されない ... } } // メール受信の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MyClass, POP3Callback, error) { SInt32 i; if (error == SFERR_NO_ERROR) { //受信に成功した場合 // 受信したメールメッセージの配列(MailArray)を取得する SFXPOP3Receiver::MailArrayConstRef mailArray = receiver.GetReceivedMailArray(); // メールメッセージの数を表示する TRACE("received %d mails", mailArray.GetSize()); for (i = 0; i < mailArray.GetSize() ; i++) { SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i]; // メールメッセージのサイズ、一意識別子、ヘッダーと本文を表示する TRACE("%d, %s, %s", minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString()); } } }
メールメッセージとは、 メールヘッダーとメール本文からなる文字列のことです。 メールメッセージは、SFXMailMessage クラスを利用して処理します。
SFXMailMessage クラスでは、 送信するメールメッセージや添付ファイルの作成、 受信したメールメッセージの解析を行えます。
例 16.20. メールメッセージの作成
SFXMailMessage message; // メールヘッダーに From フィールドを設定する message.ReplaceFromField("fromaddress@example.com"); // メールヘッダーに To フィールドを追加する( 複数回の呼び出しも可能 ) message.AddToField("toaddress1@example.com"); // メールヘッダーに Subject フィールドを設定する message.ReplaceSubjectField("title"); // メール本文を設定する message.SetBody("メール本文"); // メールメッセージを送信する smtpSender.SendMessage(&message, XALLBACK_INTERNAL(SMTPCallback));
例 16.21. 受信したメールメッセージの解析
// 受信したメールメッセージ SFXAnsiString receivedString = "From: Albert Einstein <einstein@example.com>\r\n" "To: Isaac Newton <newton@example.com>\r\n" "Subject: untitled\r\n" "Date: Sat, 08 Mar 2008 20:37:58 +0900\r\n" "\r\n" "This is a mail body.\r\n"; SFXMailMessage message; // メールメッセージを解析する message.Parse(receivedString); // メールヘッダーの From フィールドを取得する // fromString は "Albert Einstein <einstein@example.com>" になる SFXAnsiString fromString = message.GetFromField(); // メールヘッダーの To フィールドを取得する // toString は "Isaac Newton <newton@example.com>" になる SFXAnsiString toString = message.GetToField(); // メールヘッダーの Subject フィールドを取得する // subjectString は "untitled" になる SFXAnsiString subjectString = message.GetSubjectField(); // メールヘッダーの Date フィールドを取得する // date は "Sat, 08 Mar 2008 20:37:58 +0900" になる SFXDate date = message.GetDateField(); // メール本文を取得する // bodyString は "This is a mail body.\r\n" になる SFXAnsiString bodyString = message.GetBody();
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |