![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
メール送受信のための基本的なクラスとして以下の 3 種類のクラスが提供されます。
表 16.3. メール送受信クラス
| クラス名 | 解説 |
|---|---|
| SFXSMTPSender | SMTP メール送信クラスです。 |
| SFXPOP3Receiver | POP3 メール受信クラスです。 |
| SFXMailMessage | メール メッセージを処理するためのクラスです。 |
SMTP や POP3 プロトコルを詳細なレベルで処理するには、以下のクラスを使います。
表 16.4. SMTP / POP3 プロトコルクラス
| クラス名 | 解説 |
|---|---|
| SFXSMTP | SMTP プロトコルを処理するクラスです。 |
| SFXPOP3 | POP3 プロトコルを処理するクラスです。 |
| SFXMailUtility | メール メッセージを処理するためのユーティリティ クラスです。 |
| SFXMailField | メール ヘッダーのエンコードとデコードのためのクラスです。 |
![]() |
mif ファイルの設定 |
|---|---|
mif ファイルの特権レベル設定で「ネットワーク」の項目をオンにします。 | |
SMTP メール送信には SFXSMTPSender クラスを使います。
例 16.13. SMTP メール送信
class MyClass {
private:
SFXSMTPSender _sender;
CALLBACK_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 関数が呼び出される )
if ((error = _sender.SendMessage(&message,
CALLBACK_FUNCTION(SMTPCallback))) != SFERR_NO_ERROR) {
// error が SFERR_NO_ERROR でないとき、SMTPCallback 関数は呼び出されない
// エラー処理をする
...
}
}
// メール送信が完了したときに呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXSMTPSENDER(MyClass, SMTPCallback, error)
{
if (error == SFERR_NO_ERROR) {
TRACE("メールを送信しました。");
}
else {
TRACE("メール送信に失敗しました。 %d", error);
}
}
POP3 メール受信には SFXPOP3Receiver クラスを使います。
例 16.14. POP3 メール受信
class MyClass {
private:
SFXPOP3Receiver _receiver;
CALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback)
public:
Void Start(Void);
};
Void MyClass::Start(Void)
{
// POP3 サーバーの IP アドレスとポート番号を指定する ( ドメインは自動解決される )
_receiver.SetServer(SFXSocketAddress("pop3server.example.com:110"));
// ユーザー名とパスワードを設定する
_receiver.SetAccount("user", "password");
// メールを受信する。受信が完了すると、POP3Callback 関数が呼び出される
if ((error = _receiver.Receive(CALLBACK_FUNCTION(POP3Callback)))
!= SFERR_NO_ERROR) {
// error が SFERR_NO_ERROR でないとき、POP3Callback 関数は呼び出されない
// エラー処理をする
...
}
}
// メール受信が完了したときに呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MyClass, POP3Callback, error)
{
SInt32 i;
if (error == SFERR_NO_ERROR) {
//受信に成功した場合
// 受信したメールの配列 ( SFXArray ) を取得する
const SFXArray<SFXPOP3Receiver::MailInfoPtr>& mailArray =
receiver.GetReceivedMailArray();
// メール数を表示する
TRACE("received %d mails", mailArray.GetSize());
for (i = 0; i < mailArray.GetSize() ; i++) {
SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i];
//左から順に、メール サイズ、UIDL、メール ヘッダーとメール本文を含むメール メッセージを表示する
TRACE("%d, %s, %s", minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString());
}
}
}
通常のメール送信と SSL でのメール送信とで異なるのは、SetSSLMode 関数、SetTrustMode 関数、及び SetAuthorization 関数で SSL の設定をする部分だけです。
例 16.15. SSL メール送信
class MyClass {
private:
SFXSMTPSender _sender;
CALLBACK_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 接続モードの設定
_sender.SetTrustMode(SSL_TRUST_MODE_FAIL); // 証明書の検証モードの設定
_sender.SetAuthorization(AUTH_CRAM_MD5,"username","password"); // SMTP 認証モードの設定
// メールを送信する ( 送信が完了すると SMTPCallback 関数が呼び出される )
if ((error = _sender.SendMessage(&message,
CALLBACK_FUNCTION(SMTPCallback))) != SFERR_NO_ERROR) {
// error が SFERR_NO_ERROR でないとき、SMTPCallback 関数は呼び出されない
// エラー処理をする
...
}
}
// メール送信が完了したときに呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXSMTPSENDER(MyClass, SMTPCallback, error)
{
if (error == SFERR_NO_ERROR) {
TRACE("メールを送信しました。");
}
else {
TRACE("メール送信に失敗しました。 %d", error);
}
}
通常のメール受信と SSL でのメール受信とで異なるのは、SetSSLMode 関数と SetTrustMode 関数で SSL の設定をする部分だけです。
例 16.16. SSL メール受信
class MyClass {
private:
SFXPOP3Receiver _receiver;
CALLBACK_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 接続モードの設定
_receiver.SetTrustMode(SSL_TRUST_MODE_FAIL); // 証明書の検証モードの設定
// メールを受信する ( 受信が完了すると、POP3Callback 関数が呼び出される )
if ((error = _receiver.Receive(CALLBACK_FUNCTION(POP3Callback)))
!= SFERR_NO_ERROR) {
// error が SFERR_NO_ERROR でないとき、POP3Callback 関数は呼び出されない
// エラー処理をする
...
}
}
// メール受信が完了したときに呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MyClass, POP3Callback, error)
{
SInt32 i;
if (error == SFERR_NO_ERROR) {
//受信に成功した場合
// 受信したメールの配列 ( SFXArray ) を取得する
const SFXArray<SFXPOP3Receiver::MailInfoPtr>& mailArray =
receiver.GetReceivedMailArray();
// メール数を表示する
TRACE("received %d mails", mailArray.GetSize());
for (i = 0; i < mailArray.GetSize() ; i++) {
SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i];
//左から順に、メール サイズ、UIDL、メール ヘッダーとメール本文を含むメール メッセージを含むメール本体を表示する
TRACE("%d, %s, %s", minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString());
}
}
}
メール メッセージとは、メール ヘッダーとメール本文からなる文字列のことで、SFXMailMessage クラスを使って処理します。
SFXMailMessage クラスでは、 メール送信のためのメール メッセージや添付ファイルの作成 それから受信したメールのヘッダー解析などができます。
例 16.17. メール メッセージの作成
SFXMailMessage message; // メール ヘッダーに From フィールドを設定する message.ReplaceFromField("fromaddress@example.com"); // メール ヘッダーに To フィールドを追加する( 複数回の呼び出しも可能 ) message.AddToField("toaddress1@example.com"); // メール ヘッダーに Subject フィールドを設定する message.ReplaceSubjectField("title"); // メール本文を設定する message.SetBody("メール本文"); // メールを送信する smtpSender.SendMessage(&message, CALLBACK_FUNCTION(SMTPCallback));
例 16.18. 受信メール メッセージの解析
// 受信したメール メッセージ 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 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|