原创 使用libESMTP函数库实现电子邮件的发送

2024-6-15 18:58 183 2 2 分类: 软件与OS 文集: Linux
代码:

#define _XOPEN_SOURCE			// 定义系统环境,使符合X/Open标准
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 								// 包含libesmtp函数库

int main()
{
   smtp_session_t session;							// 定义SMTP会话
   smtp_message_t message;							// 定义SMTP消息结构
   struct sigaction sa;								// 该结构包含收到信号后程序的行为
   const smtp_status_t *status;						// 用于保存SMTP状态
   char buf[128];									// 用于文件的缓冲区
   FILE *fp;										// 文件标识符
   if((session = smtp_create_session ()) == NULL){			// 创建SMTP会话
      fprintf (stderr, "创建会话失败:%s\n",
               smtp_strerror (smtp_errno (), buf, sizeof buf));
      return 1;
   }
   if((message = smtp_add_message (session)) == NULL) {	// 从SMTP会话中接受消息,判断是否成功
      fprintf (stderr, "服务器无应答:%s\n",
               smtp_strerror (smtp_errno (), buf, sizeof buf));
      return 1;
   }
   sa.sa_handler = SIG_IGN;							// 避免进程僵死
   sigemptyset(&sa.sa_mask);							// 初始化信号集
   sa.sa_flags = 0;									// 使信息不被阻塞
   sigaction (SIGPIPE, &sa, NULL); 					// 设置信号行为
   smtp_set_server (session, "127.0.0.1:25");				// 设置SMTP服务器地址与端口
   smtp_set_reverse_path (message, "test@test.com");		// 设置发送者邮箱地址
   smtp_set_header (message, "To", NULL, NULL);			// 使邮件头包含目的地邮箱地址
   smtp_set_header (message, "Subject", " test mail");		// 使邮件头包含主题
   smtp_set_header_option (message, "Subject", Hdr_OVERRIDE, 1);	// 使用默认的邮件头设置
   fprintf(stderr, "%s\n", "SMTP服务器设置成功");
   if ((fp = fopen ("mail.eml", "r")) == NULL) {
      perror("打开文件失败");
      return 1;
   }
   smtp_set_message_fp (message, fp);					// 将文件中的内容作为邮件消息内容
   smtp_add_recipient (message,"test@localhost");			// 为消息添加一个容器
   if (!smtp_start_session (session)){					// 连接SMTP服务器传送邮件
      fprintf (stderr, "SMTP server problem %s\n",
      smtp_strerror (smtp_errno (), buf, sizeof buf));
   }
   else
   {
      status = smtp_message_transfer_status (message);	// 获取发送状态
      printf ("%d %s", status->code,
              (status->text != NULL) ? status->text : "\n");
   }
   smtp_destroy_session (session);						// 结束SMTP会话
   if(fp != NULL)
      fclose(fp);									// 关闭文件
   return 0;
}


安装软件

sudo apt-get install sendmail(其中已经包含了sendmail-bin)

sudo apt-get install sasl2-bin

编译:

gcc -std=c99 -Wall `libesmtp-config --cflags`   -o sendmail sendmail.c -lesmtp
运行效果:

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /3 下一条