![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0 |
メールの送受信を行うのに必要なクラスです。
通常、メールの送受信を行うのに必要なクラスは次の3つです。
表 13.1. メール関係クラス(通常版)
| SFUSmtpSender | メール送信を行うクラス |
| SFUPop3Receiver | メール受信を行うクラス |
| SFUMailMessage | メールヘッダ、メール本文、添付ファイルを扱うクラス |
SMTP や POP3 プロトコルをより詳細に扱う場合は、以下のクラスも用います。
表 13.2. メール関係クラス(詳細版)
| SFUSmtp | SMTPプロトコルを扱うクラス |
| SFUPop3 | POP3 プロトコルを扱うクラス |
| SFUMailField | メールヘッダのエンコード、デコードを行うクラス |
| SFUMailUtil | メールヘッダ解析のための補助クラス |
| SFUBase64 | Base64のエンコード、デコードを行うクラス |
| SFUQuotedPrintable | QuotedPrintableのエンコード、デコードを行うクラス |
詳しい使い方はそれぞれのクラスのリファレンスを参照してください。 以下では最低限の使い方のみ説明します。
SFUSmtpSender クラスを用いることで、SMTP プロトコルの詳細を知らずにメールを送信することができます。SMTP プロトコルを直に扱う場合はSFUSmtp クラスを使います。
SFUSmtpSender クラスは次のように使います。
SFUSmtpSender sender;
// あるクラス MyClass中での処理
Void MyClass::func() {
sender.Open(OnNotifyEntry, this);
// SMTP認証を用いる場合、SetAuthorization を呼び出す。
// (通常のSMTP通信で、SMTP認証を使う機会はあまりありません)
sender.SetAuthorization(SFUSmtpSender::AUTH_CRAM_MD5, "username", "password");
// 送信用メールサーバとポート番号を指定。
SFUIPEndpoint endpoint("127.0.0.1:25");
sender.SetServer(endpoint);
{
SFBNetMgrSmp netmgr = SFBNetMgr::NewInstance();
INAddr addr = netmgr->GetMyIPAddr(); //自分自身のアドレスを取得
SFUIPEndpoint ep(addr);
sender.SetHostName(ep.ToString());
}
sender.SetFrom("<fromaddress@example.com>"); // Fromアドレス
sender.AddTo("<toaddress1@example.com>"); // Toアドレス
sender.AddTo("<toaddress2@example.com>"); // Toアドレスは複数指定可。
//メール本文
sender.SetMessage("Mail test\r\nThis mail is sent by SFUSmtpSender.\r\n");
sender.Send(); //送信
}
// static関数(メールの送信に成功 or 失敗した場合、↓が実行されます)
Void MyClass::OnNotifyEntry(SFUSmtpSender::NotifyEnum notify, SFCError err, VoidPtr data) {
MyClass(data)->OnNotify(notify, err);
}
Void MyClass::OnNotify(SFUSmtpSender::NotifyEnum notify, SFCError err){
if (err == SFERR_NO_ERROR) { //送信に成功した場合
//処理
}
sender.Close();
}
SFUPop3Receiver クラスを用いることで、POP3プロトコルの詳細を知らずにメールを受信することができます。POP3プロトコルを直に扱う場合は SFUPop3 クラスを使います。
SFUPop3Receiver クラスは次のように使います。
// あるクラス MyClass中での処理
SFUPop3Receiver receiver;
Void MyClass::func() {
receiver.Open(OnNotifyEntry, this);
SFUIPEndpoint endpoint("127.0.0.1:110"); // 受信用メールサーバとポート番号を指定。
receiver.SetServer(endpoint);
receiver.SetAccount("user", "password"); //ユーザ、パスワードを設定
receiver.Receive(-1, -1); //全メールの全文を取得
}
//-----------------------------------------------------------------
//static関数(メールの送信に成功 or 失敗した場合、↓が実行されます)
Void MyClass::OnNotifyEntry(SFUPop3Receiver::NotifyEnum notify, SFCError err, VoidPtr data) {
MyClass(data)->OnNotify(notify, err);
}
//-----------------------------------------------------------------
Void MyClass::OnNotify(SFUPop3Receiver::NotifyEnum notify, SFCError err){
if (err == SFERR_NO_ERROR) { //受信に成功した場合
//処理
//下の例では全受信メールをDBGPRINTFで表示
SInt32 i;
SFXArray<SFUPop3Receiver::MailInfoPtr> mailArray = receiver.GetReceivedMailArray();
DBGPRINTF("received %d mails", mailArray.GetSize()); //数を表示
for (i = 0; i < mailArray.GetSize() ; i++) {
SFUPop3Receiver::MailInfoPtr minfo = mailArray[i];
DBGPRINTF("%d, %s, %s",minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString());
//左から順に、メールサイズ、UIDL、メール本体(ヘッダ含む)
}
}
receiver.Close();
}
SFUMailMessage クラスはメールメッセージ(ヘッダと本文)を扱うクラスです。 受信したメールのヘッダ解析や、送信メッセージのヘッダ作成などを行います。 添付ファイルを扱うこともできます。
以下のソースコードは受信したメールのヘッダ解析を行っています。
//SFXAnsiString str に受信したメールメッセージ(ヘッダ+本文)が入っているとします。 SFUMailMessage mailmsg; mailmsg.Parse(str); SFXAnsiString from = mailmsg.GetFromField(); //ヘッダのFrom: を取得 SFXAnsiString to = mailmsg.GetToField(); //ヘッダのTo: を取得 SFXAnsiString subject = mailmsg.GetSubjectField(); //ヘッダのSubject: を取得 SFXDate date = mailmsg.GetDateField(); //ヘッダのDate: をSFXDate形式で取得 SFXAnsiString body = mailmsg.GetBody(); //メール本文を取得(添付ファイルの扱いは省略)
以下のソースコードは送信のためのヘッダ作成を行っています。
SFUMailMessage mailmsg;
mailmsg.ReplaceFromField("fromaddress@example.com"); //ヘッダのFrom: をセット
mailmsg.AddToField("toaddress1@example.com"); //ヘッダのTo: をセット(複数回呼び出し可)
mailmsg.ReplaceSubjectField("title"); //ヘッダのSubject: をセット
mailmsg.SetBody("本文"); //メール本文をセット
SFXAnsiString sendStr = mailmsg.Write();
//sendStrをSFUSmtp(Sender)を用いて送信する
|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|