Click here to Skip to main content
Click here to Skip to main content

Sending mail in Managed C++ using SMTP

By , 25 Apr 2002
 

Introduction

I wrote this class after reading Agus Kurniawan's article "Sending Mail in C# using SMTP". So please make sure you recognize Agus's work. I just create it a class in Managed C++ to send mail.

The thing the bothers me the most, while writing MC++, is conversions and types. The new String type in Managed C++, in my opinion, does not have the flexibility that I expected.

Code listings

These is the code of the class starting with the header file:

// Header File
#pragma once

__gc class CSendEmail
{
public:
    CSendEmail(String * Server);
    bool SendEmail( String * From, 
        String * To, 
        String * Subject,
        String * Body);

private:
    String * m_sServer;

};

Note the declaration of ConvertToChar as a member of the class.

This is the cpp file:

#using <mscorlib.dll>
#using <System.dll>

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Net;
using System::Net::Sockets::NetworkStream;
using System::Net::Sockets::TcpClient;
using System::IO::StreamReader;

#include "sendemail.h"

CSendEmail::CSendEmail(String * Server)
{
    m_sServer = Server;
}

bool CSendEmail::SendEmail( String * From, 
                           String * To, 
                           String * Subject,
                           String * Body)
{
    NetworkStream  * pNsEmail;
    StreamReader   * RdStrm;
    String           * Data;
    unsigned char  sendbytes __gc[];


    TcpClient *pServer = new TcpClient(m_sServer,25);

    try
    {
        pNsEmail = pServer->GetStream();
        RdStrm = new StreamReader(pServer->GetStream());
    }

    catch (Exception  * e )
    {
        Console::WriteLine(e->ToString());
        Console::WriteLine("Socket Close by the server");

        pServer->Close();
        sendbytes = 0;
        return false;
    }

    Console::WriteLine(RdStrm->ReadLine());

    Data  = "HELO server \r\n";    
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);    
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    Data = String::Concat(S"MAIL FROM: ",
        S"<", From, S">", S"\r\n");     
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);    
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    Data = String::Concat(S"RCPT TO: ", 
        S"<", To, S">", S"\r\n");    
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    Data = "DATA \r\n";
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    Data = String::Concat(S"FROM: ", From, S"\r\n", S"SUBJECT: ", 
        Subject, S"\r\n", Body, S"\r\n.\r\n");
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    Data = "QUIT \r\n";
    sendbytes = System::Text::Encoding::ASCII->GetBytes(Data);
    pNsEmail->Write(sendbytes, 0, sendbytes->get_Length());
    sendbytes = 0;
    Data = 0;
    Console::WriteLine(RdStrm->ReadLine());

    pNsEmail->Close();
    RdStrm->Close();
    pServer->Close();

}

Usage

// your SMTP server
CSendEmail * pServer = new CSendEmail("mail.server.com");

pEmail->SendEmail("you@yourserver.com",
                     "yourfriend@yourfriendserver.com",
                     "Hello Friend",
                     "Message body");

I do know, that there is no UI in this program. When Microsoft creates a UI for forms as C# style, I'll update this article. I don't really want to use MFC. Have fun!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Albert Pascual
Web Developer
United States United States
Member
Al is just another Software Engineer working in C++, ASp.NET and C#. Enjoys snowboarding in Big Bear, and wait patiently for his daughters to be old enough to write code and snowboard.
 
Al is a Microsoft ASP.NET MVP
 
Blog

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionIs there any way to set sender-IP manually in smtp?memberMember 18940854 Apr '11 - 2:17 
GeneralTwo commentsmemberLouis Ma6 May '10 - 8:43 
Generalhelp in writting codememberTusajigwe Isaga12 Sep '07 - 2:50 
Generalfatal error C1190: managed targeted code requires '#using &lt;mscorlib.dll&gt;' and '/clr' optionmemberGNN_Ricardo27 Jun '05 - 10:32 
GeneralRe: fatal error C1190: managed targeted code requires '#using &lt;mscorlib.dll&gt;' and '/clr' optionmemberMuralish19 Apr '07 - 1:51 
GeneralRe: fatal error C1190: managed targeted code requires '#using &lt;mscorlib.dll&gt;' and '/clr' optionmemberMember 43652091 Nov '09 - 20:39 
GeneralThe New String TypeprotectorHeath Stewart1 Jan '05 - 6:43 
QuestionWhy not use MailMessage?memberMChimley13 May '04 - 0:45 
AnswerRe: Why not use MailMessage?protectorHeath Stewart1 Jan '05 - 6:36 
GeneralProblems using headermemberericminh13 Dec '03 - 16:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 26 Apr 2002
Article Copyright 2002 by Albert Pascual
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid