Home > Products > SophiaFramework UNIVERSE > Tutorial > POP / SMTP Mailer > - 5 / 6 -

BREW POP / SMTP Mailer - 5 / 6 -

Receiving Mail

The SFXPOP3Receiver class is used to receive mail.

The handler for the Receive button of MainWindow executes mail reception.

After setting the information concerning the account and server, mail is obtained by Receive().

To receive and delete mail at the same time, ReceiveAndDelete() is used.

The POP3Callback function for receiving mail should be set up as the argument for Receive() or ReceiveAndDelete().

HANDLER_IMPLEMENT_VOIDCONTROL(MainWindow, OnButtonControl2, result, control)
{
    // Prepare for and start receiving mail

    SFCError error;
    SFXConfigPtr option = SimpleMailer::GetOption();

    // Set account ( user name and password )

    _receiver.SetAccount(option->ReadSFXAnsiString(OPTION_USER, ""),
        option->ReadSFXAnsiString(OPTION_PASSWORD, "")
	 ,SFXPOP3Receiver::AUTH_ONLY_USERPASS  );
//SFXPOP3Receiver::AUTH_ONLY_USERPASS is the password authorization,
//different with the mail servers
//in this case it is the yahoo.co.jp mail server // Set address and port number of POP3 server // Domain name is automatically resolved _receiver.SetServer(SFXSocketAddress( option->ReadSFXAnsiString(OPTION_POP3SERVER, ""), option->ReadUInt16(OPTION_POP3PORT, 110))); // Receive mail & register "POP3Callback" function // whether to receive and delete mail or not if (option->ReadBool(OPTION_ERASEMAIL, false)) { // Receiving mail error = _receiver.Receive(CALLBACK_FUNCTION(POP3Callback)); } else { // Receive and delete error = _receiver.ReceiveAndDelete(CALLBACK_FUNCTION(POP3Callback)); } if (error == SFERR_NO_ERROR) { // if no error // Make dialog _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle() .Deflate(20, 100), "Receiving...", ""); } else { // Make dialog _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle() .Deflate(20, 100), "Reception failed.g", "OK"); } }

Declare and Define "POP3Callback" function for receiving mail

Declare

class MainWindow : public SFRTitleWindow {

private:

        ...
    
    CALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback)

        ...
}

Define

Received mail is saved as an Array of pointers to the MailInfo struct.

MailInfo is defined as follows.

struct MailInfo {
    UInt32          size; 
    SFXAnsiString   uidl; 
    SFXAnsiString   mail; // heaader and body
};

* The i th message is obtained by mailArray[i]->mail.

CALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MainWindow, POP3Callback, error)
{
    SFXWideString message;
    SFXPropertyPtr mail;
    SInt32 i;

    if (_dialog != null) {
        // Close "Receiving..." dialog
        _dialog->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE,
            SRP16_TERMINATE_INVOKE, true));
    }
    if (error == SFERR_NO_ERROR) {
        message.Set("Successfull reception.");
    }
    else {
        message.Set("Reception failed");
    }
    // Make dialog
    _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle()
        .Deflate(20, 100), message, "OK");

    if (error == SFERR_NO_ERROR) { // if no error
        if (_dialog != null) {
           // Registration of dialog handler 
            _dialog->RegisterHandler(SREVT_DIALOG, HANDLER_BEFORE,
                HANDLER_FUNCTION(OnDialog));
        }
        mail = SimpleMailer::GetMail();
        // Received mail is copied.  
        const SFXArray<SFXPOP3Receiver::MailInfoPtr>& mailArray =
            _receiver.GetReceivedMailArray();
        for (i = 0; i < mailArray.GetSize(); ++i) {
            SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i];
            mail->Set(minfo->uidl, minfo->mail);
        }
    }
    // Redrawing
    SFRApplication::GetInstance()->Invoke(
        SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, false));
}

Display Received Mail

Received mail is displayed by ReceivedWindow.

Go back  1   2   3   4   5   Apdx   Next page