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

BREW POP / SMTP Mailer - 4 / 6 -

Sending Mail

The SFXSMTPSender class is used to send mail.

class SendingWindow : public SFRTitleWindow {

private:

    SFXSMTPSender _sender;
    ...
}

Handler for the "Send Mail" button of SendingWindow

Information is set on the SMTP server by the SetServer() function. Mail messages are made by the SFXMailMessage class and sent by the SendMessage() function.

An SMTPCallback function should be set as the argument of SendMessage().

HANDLER_IMPLEMENT_VOIDCONTROL(SendingWindow, OnButtonControlOk, result, control)
{
    SFCError error;
    // Setup data is obtained from the application class.
    SFXConfigPtr option = SimpleMailer::GetOption();

    // Class that shows mail message
    SFXMailMessage message;

    // Setting of "From" address
    message.SetFromField(_textControlFrom->GetText());

    // Setting of "To" address
    message.AddToField(_textControlTo->GetText());

    // Setting of "Subject"
    message.SetSubjectField(_textControlSubject->GetText());

    // Setting of message "Body"
    message.SetBody(_textControlBody->GetText());

    // Setting of address and port number of SMTP server
    // Domain name is automatically resolved
    _sender.SetServer(SFXSocketAddress(
        option->ReadSFXAnsiString(OPTION_SMTPSERVER, ""),
        option->ReadUInt16(OPTION_SMTPPOPT, 25)));

    // Send mail  & register "SMTPCallback" function
    error = _sender.SendMessage(&message, CALLBACK_FUNCTION(SMTPCallback));

    if (error == SFERR_NO_ERROR) { // if no error
        // Make dialog
        _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle()
            .Deflate(20, 100), "Sending...", "");
    }
    else {
        // Make dialog
        _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle()
            .Deflate(20, 100), "Fail in sending", "OK");
        if (_dialog != null) {
            // Register dialog hondler
            _dialog->RegisterHandler(SREVT_DIALOG, HANDLER_BEFORE,
                HANDLER_FUNCTION(OnDialog));
        }
    }
}

Declare and Define "SMTPCallback" function for sending mail

Declare

class SendingWindow : public SFRTitleWindow {

private:

        ...
    
    CALLBACK_DECLARE_SFXSMTPSENDER(SMTPCallback) 
    
        ...
}

Define

CALLBACK_IMPLEMENT_SFXSMTPSENDER(SendingWindow, SMTPCallback, error)
{
    SFXWideString message;

    if (error == SFERR_NO_ERROR) {
        message.Set("Succeeded in sending");
    }
    else {
        message.Set("Failed in sending");
    }
    if (_dialog != null) {
        // close "Sending..." dialog 
        _dialog->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE,
            SRP16_TERMINATE_INVOKE, true));
    }
    // make dialog
    _dialog = ::new SFRMessageDialog(SFXGraphics::GetDeviceRectangle()
        .Deflate(20, 100), message, "OK");
    if (_dialog != null) {
        // Registration of dialog handler
        _dialog->RegisterHandler(SREVT_DIALOG, HANDLER_BEFORE,
            HANDLER_FUNCTION(OnDialog));
    }
    // Redrawing
    SFRApplication::GetInstance()->Invoke(
        SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, false));
}

Go back  1   2   3   4   5   Apdx   Next page