Exemplo n.º 1
0
BOOL CSMTP::transmit_message(CMailMessage * msg)
{
	CString sFrom;
	CString sTo;
	CString sTemp;
	CString sEmail;

	ASSERT( msg != NULL );
	if( !m_bConnected )
	{
		m_sError = _T( "Must be connected" );
		return FALSE;
	}

	// Send the MAIL command
	//
	//sFrom.Format( _T( "MAIL From: <%s>\r\n" ), (LPCTSTR)msg->m_sFrom );
	sFrom = _T( "MAIL From: <*****@*****.**>\r\n" );
	OutputDebugString(sFrom);

	m_wsSMTPServer.Send( (LPCTSTR)sFrom, sFrom.GetLength() );
	if( !get_response( GENERIC_SUCCESS ) )
		return FALSE;
	
	// Send RCPT commands (one for each recipient)
	//
	for( int i = 0; i < msg->GetNumRecipients(); i++ )
	{
		msg->GetRecipient( sEmail, sTemp, i );
		sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );

		OutputDebugString(sTo);

		m_wsSMTPServer.Send( (LPCTSTR)sTo, sTo.GetLength() );
		get_response( GENERIC_SUCCESS );
	}

   //*** Begin <JFO>
	   for(int i = 0; i < msg->GetNumRecipients(CMailMessage::CC); i++ )
	   {
		   msg->GetRecipient( sEmail, sTemp, i, CMailMessage::CC );
		   sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );

		   OutputDebugString(sTo);

		   m_wsSMTPServer.Send( (LPCTSTR)sTo, sTo.GetLength() );
		   get_response( GENERIC_SUCCESS );
	   }

      for(int i = 0; i < msg->GetNumRecipients(CMailMessage::BCC); i++ )
	   {
		   msg->GetRecipient( sEmail, sTemp, i, CMailMessage::BCC );
		   sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );

		   OutputDebugString(sTo);

		   m_wsSMTPServer.Send( (LPCTSTR)sTo, sTo.GetLength() );
		   get_response( GENERIC_SUCCESS );
	   }
   //*** End

	// Send the DATA command
	sTemp = _T( "DATA\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() );
	if( !get_response( DATA_SUCCESS ) )
	{
		return FALSE;
	}
	// Send the header
	//
	m_wsSMTPServer.Send( (LPCTSTR)msg->m_sHeader, msg->m_sHeader.GetLength() );

	// Send the body
	//
	sTemp = cook_body( msg );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() );

	// Signal end of data
	//
	sTemp = _T( "\r\n.\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() );
	if( !get_response( GENERIC_SUCCESS ) )
	{
		return FALSE;
	}
	return TRUE;
}
Exemplo n.º 2
0
BOOL CSMTP::transmit_message(CMailMessage * msg)
{
	puts("transmit message");
	CString sFrom;
	CString sTo;
	CString sTemp;
	CString sEmail;

	if( !m_bConnected )
	{
		//m_sError = _T( "通信未建立" );//<%IDS_SMTP_14%>
		m_sError = ::FuncGetStringFromIDS("<%IDS_SMTP_14%>");
		return FALSE;
	}

	// Send the MAIL command
	//
	sFrom.Format( _T( "MAIL From: <%s>\r\n" ), (LPCTSTR)msg->m_sFrom );
	send(m_wsSMTPServer, (LPCTSTR)sFrom, sFrom.GetLength(), 0);
	if( !get_response( GENERIC_SUCCESS ) )
		return FALSE;
	
	// Send RCPT commands (one for each recipient)
	//
	for( int i = 0; i < msg->GetNumRecipients(); i++ )
	{
		msg->GetRecipient( sEmail, sTemp, i );
		sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );
		send(m_wsSMTPServer, (LPCTSTR)sTo, sTo.GetLength(), 0);
		get_response( GENERIC_SUCCESS );
	}

   //*** Begin <JFO>
	   for( i = 0; i < msg->GetNumRecipients(CMailMessage::CC); i++ )
	   {
		   msg->GetRecipient( sEmail, sTemp, i, CMailMessage::CC );
		   sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );
		   send(m_wsSMTPServer, (LPCTSTR)sTo, sTo.GetLength(), 0);
		   get_response( GENERIC_SUCCESS );
	   }

      for( i = 0; i < msg->GetNumRecipients(CMailMessage::BCC); i++ )
	   {
		   msg->GetRecipient( sEmail, sTemp, i, CMailMessage::BCC );
		   sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );
		   send(m_wsSMTPServer, (LPCTSTR)sTo, sTo.GetLength(), 0);
		   get_response( GENERIC_SUCCESS );
	   }
   //*** End

	// Send the DATA command
	sTemp = _T( "DATA\r\n" );
	send(m_wsSMTPServer, (LPCTSTR)sTemp, sTemp.GetLength(), 0);
	if( !get_response( DATA_SUCCESS ) )
	{
		return FALSE;
	}
	// Send the header
	//
	send(m_wsSMTPServer, (LPCTSTR)msg->m_sHeader, msg->m_sHeader.GetLength(), 0);

	// Send the body
	//
	sTemp = cook_body( msg );
	send(m_wsSMTPServer, (LPCTSTR)sTemp, sTemp.GetLength(), 0);

	// Signal end of data
	//
	sTemp = _T( "\r\n.\r\n" );
	send(m_wsSMTPServer, (LPCTSTR)sTemp, sTemp.GetLength(), 0);
	if( !get_response( GENERIC_SUCCESS ) )
	{
		return FALSE;
	}
	return TRUE;
}