当前位置: 技术问答>linux和unix
想要在linux下面写一个电子邮件sendmail下的发送程序,不知道怎么做,从何处入手.
来源: 互联网 发布时间:2015-08-09
本文导语: 大侠门给些建议.如果有这方面的程序,一定高分相赠. | 直接贴出来就可以了,只是SmtpClient部分,连MX服务器用,无验证,看一下怎么回事就可以了,很简单的 /** * File: SmtpClient.h * Desc: smtp...
大侠门给些建议.如果有这方面的程序,一定高分相赠.
|
直接贴出来就可以了,只是SmtpClient部分,连MX服务器用,无验证,看一下怎么回事就可以了,很简单的
/**
* File: SmtpClient.h
* Desc: smtp client to send mail out..
* AUTH: flying & winux
* Date: Apr.12.2004
*/
#if !defined _SMTP_CLIENT_H
#define _SMTP_CLIENT_H
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
#include
#include
#include "config.h"
#define TIMEOUT 90
enum Status
{
STAT_HELO,
STAT_AUTH_START,
STAT_AUTH_USER,
STAT_AUTH_PASS,
STAT_MLFM,
STAT_RCPT,
STAT_DATA,
STAT_TRANS,
STAT_FINISH,
STAT_QUIT,
STAT_COUNT
};
class SmtpClient
{
public:
SmtpClient(int nType = 0);
virtual ~SmtpClient();
public:
int SendMail(int nSocket, const char* szMailFrom,
const char* szMailTo, const char* szMailContent = NULL);
int SendMail( const char* szMailFrom, const char* szMailTo,
const char* szMailContent = NULL, int nMailSize = MAX_FILE_SIZE );
int Connect( const char* szRemoteIP, int nRemotePort );
int Disconnect();
int Helo();
int Quit();
int GetStatus();
int GetRemoteRet( char* szRet);
private:
char* m_szMailContent;
char* m_szMailPointer;
char* m_HeaderToField;
char* m_pMailTo;
char m_szRemoteRetCode[5];
int m_nMailContentSize;
int m_nISPType;
int m_nStatus;
int m_nSocket;
int m_nConnect;
int m_nHeaderToSize;
private:
ACE_SOCK_Connector m_connector;
ACE_SOCK_Stream m_peer;
ACE_Time_Value m_timeout;
char m_buffer[ 1024 ];
private:
int DoSmtpSession(int nSocket, const char* szMailFrom,
const char* szMailTo);
int DoSmtpInit(int nSocket);
int DoSmtpStep(int nSocket, char* szBuffer, int nSize, int nStatus);
int CheckReply(const char* szReply);
};
#endif
/**
* File: SmtpClient.h
* Desc: smtp client to send mail out..
* AUTH: flying & winux
* Date: Apr.12.2004
*/
#if !defined _SMTP_CLIENT_H
#define _SMTP_CLIENT_H
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
#include
#include
#include "config.h"
#define TIMEOUT 90
enum Status
{
STAT_HELO,
STAT_AUTH_START,
STAT_AUTH_USER,
STAT_AUTH_PASS,
STAT_MLFM,
STAT_RCPT,
STAT_DATA,
STAT_TRANS,
STAT_FINISH,
STAT_QUIT,
STAT_COUNT
};
class SmtpClient
{
public:
SmtpClient(int nType = 0);
virtual ~SmtpClient();
public:
int SendMail(int nSocket, const char* szMailFrom,
const char* szMailTo, const char* szMailContent = NULL);
int SendMail( const char* szMailFrom, const char* szMailTo,
const char* szMailContent = NULL, int nMailSize = MAX_FILE_SIZE );
int Connect( const char* szRemoteIP, int nRemotePort );
int Disconnect();
int Helo();
int Quit();
int GetStatus();
int GetRemoteRet( char* szRet);
private:
char* m_szMailContent;
char* m_szMailPointer;
char* m_HeaderToField;
char* m_pMailTo;
char m_szRemoteRetCode[5];
int m_nMailContentSize;
int m_nISPType;
int m_nStatus;
int m_nSocket;
int m_nConnect;
int m_nHeaderToSize;
private:
ACE_SOCK_Connector m_connector;
ACE_SOCK_Stream m_peer;
ACE_Time_Value m_timeout;
char m_buffer[ 1024 ];
private:
int DoSmtpSession(int nSocket, const char* szMailFrom,
const char* szMailTo);
int DoSmtpInit(int nSocket);
int DoSmtpStep(int nSocket, char* szBuffer, int nSize, int nStatus);
int CheckReply(const char* szReply);
};
#endif
|
一般来说就是socket通讯的问题:
要确认邮件服务器是否需要密码验证
1、首先连接邮件服务器的25端口
2、发送EHLO到该连接,并检查返回。
3、根据服务器类型选择是否发送AUTH LOGIN。
4、发送MAIL FROM 与发送方地址并检查返回。
5、发送RCPT TO与接收方地址并检查返回。
6、发送DATA与正文。
具体命令及返回信息可看有关smtp协议的资料。
如果手头有smtp服务器可telnet xxx.xxx.xx.xxx 25到该服务器上试验。
要确认邮件服务器是否需要密码验证
1、首先连接邮件服务器的25端口
2、发送EHLO到该连接,并检查返回。
3、根据服务器类型选择是否发送AUTH LOGIN。
4、发送MAIL FROM 与发送方地址并检查返回。
5、发送RCPT TO与接收方地址并检查返回。
6、发送DATA与正文。
具体命令及返回信息可看有关smtp协议的资料。
如果手头有smtp服务器可telnet xxx.xxx.xx.xxx 25到该服务器上试验。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。