linux下用c发邮件

http://www.etpan.org/

https://github.com/dinhviethoa/libetpan/blob/master/tests/smtpsend.c



linux,  邮件,  自动
分享到: QQ空间 腾讯微博 腾讯朋友
分享0 收藏0 给力0 坑爹0

相关帖子

  • • Linux的历史
  • • 再上传一本学linux的一本小册子!
  • • linux 内核编译
  • • 装oracle817 for linux的关键是什么?
  • • 有没有在linux下可以实现多个操作系统同试运行的软件
  • • 好书推荐-LINUX与UNIX SHELL编程指南
  • • LINUX下如何使用光驱?
  • • LINUX网卡的问题
  • • Good article for installing, configuring DNS under Linux system
  • • Linux多重引导器
 

使用道具 举报

   
gadfly

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
12
帖子
2910
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
沙发
  发表于 2003-7-5 21:24:54  | 只看该作者

如何在linux下用C实现自动发送邮件?

可以调用外部的mail命令呀。不需要本机是mail server
 
 

使用道具 举报

   
caohongxin  该用户已被删除
板凳
  发表于 2003-7-5 21:43:27  | 只看该作者

如何在linux下用C实现自动发送邮件?

提示:  作者被禁止或删除 内容自动屏蔽
 
 

使用道具 举报

   
gadfly

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
12
帖子
2910
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
4
  发表于 2003-7-5 22:06:26  | 只看该作者

如何在linux下用C实现自动发送邮件?

一般是你先生成信件,然后用这种方式。

printf(command, "sendmail %s <%s", receiver, mail_file_name);
system(command);
 
 

使用道具 举报

   
caohongxin  该用户已被删除
5
  发表于 2003-7-6 15:24:05  | 只看该作者

如何在linux下用C实现自动发送邮件?

提示:  作者被禁止或删除 内容自动屏蔽
 
 

使用道具 举报

   
无双
linux下用c发邮件_第1张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
146
帖子
4574
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
6
  发表于 2003-7-6 18:53:59  | 只看该作者

如何在linux下用C实现自动发送邮件?

1
应该先配好你的mail命令
让可以用mail命令发信

2
system *发信命令"  
发信命令和你自己想发一封信时敲的命令一样
 
 

使用道具 举报

   
夜未眠
linux下用c发邮件_第2张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
41
帖子
473
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
7
  发表于 2003-7-6 19:03:49  | 只看该作者

如何在linux下用C实现自动发送邮件?

记得好象有现成的库吧.晚上有空帮你找找,找不着可别怪我 :)
 
 

使用道具 举报

   
mengwg

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
28
帖子
342
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
8
  发表于 2003-7-6 19:09:51  | 只看该作者

如何在linux下用C实现自动发送邮件?

orient 类库中提供了利用smtp协议发送邮件的类TSmtp。
TSmtp支持附件,同时发给多个用户。
定义的头文件 smtp.h
下面是一段例子程序:
  1. TSmtp smtp;

  2.   //设置邮件主机
  3.   smtp.Set_Host("smtp.263.net");
  4.   //设置邮件主机接收端口
  5.   smtp.Set_Port(25);
  6.   //设置验证用户名
  7.   smtp.Set_User("menang");
  8.   //设置验证用户密码
  9.   smtp.Set_Passwd("xxxxx");
  10.   //设置发送邮箱
  11.   smtp.Set_Sender("menang @263.net");
  12.   //设置接收邮箱
  13.   smtp.Set_Target("[email protected]");
  14.   //增加接收邮箱
  15.   smtp.Add_Target("[email protected]");
  16.   //附上一个文件
  17.   smtp.Attach_File("c:\\vwd.log");
  18.   //设置邮件正文
  19.   smtp.Set_Msg_Body("这是一份测试maill");
  20.   //设置邮件标题
  21.   smtp.Set_Subject("这是测试123");
  22.   //发送邮件
  23.   if(smtp.Send())
  24.     printf("send ok\n");
  25.   else
  26.    printf("send failure\n");
复制代码
 
 

使用道具 举报

   
夜未眠
linux下用c发邮件_第3张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
41
帖子
473
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
9
  发表于 2003-7-6 19:26:33  | 只看该作者

如何在linux下用C实现自动发送邮件?

有人已经帮你找到了。
 
 

使用道具 举报

   
caohongxin  该用户已被删除
10
  发表于 2003-7-6 19:30:25  | 只看该作者

如何在linux下用C实现自动发送邮件?

提示:  作者被禁止或删除 内容自动屏蔽
 
 

使用道具 举报

   
夜未眠
linux下用c发邮件_第4张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
41
帖子
473
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
11
  发表于 2003-7-6 19:35:42  | 只看该作者

如何在linux下用C实现自动发送邮件?

标准C也有关于邮件的库啊 :)
 
 

使用道具 举报

   
夜未眠
linux下用c发邮件_第5张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
41
帖子
473
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
12
  发表于 2003-7-6 19:44:34  | 只看该作者

如何在linux下用C实现自动发送邮件?

换了台机器帮你找到了,你看是不是你想要的

http://libetpan.sourceforge.net/
 
 

使用道具 举报

   
zhlei
linux下用c发邮件_第6张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
15
帖子
70
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
13
  发表于 2003-7-6 19:59:06  | 只看该作者

如何在linux下用C实现自动发送邮件?

我查了一下,在标准C中好像没有MAIL函数库
 
 

使用道具 举报

   
无双
linux下用c发邮件_第7张图片

临时会员

该用户从未签到

阅读权限
10
积分
0
主题
146
帖子
4574
日志
0
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
14
  发表于 2003-7-6 20:02:50  | 只看该作者

如何在linux下用C实现自动发送邮件?

不是标准C的吧

而是另外的函数库
另外也可以使用mengwg的中间件实现或是夜未眠推荐的地址开发
 
 

使用道具 举报

   
caohongxin  该用户已被删除
15
  发表于 2003-7-6 20:18:46  | 只看该作者

如何在linux下用C实现自动发送邮件?








linux下c发送邮件socket验证问题

下面是一个linux下c写的发送邮件的程序。
我想在SendMail函数中加一些判断。就是与smtp服务器数据交换的每一步加一个验证。比如认证失败了。然后就停止发送邮件。返回一个错误的代号。现在是失败了函数也一直执行。返回结果都是0。不知道是否成功失败。只有看调试信息。我是一个新手。请高手帮忙。先谢了。

[code]
#include "smtp.h"

#ifdef WIN32

#include <windows.h>
#include <winsock.h>
#include <stdio.h>

#else
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>

#endif

int sock_connect(const char *pHostName,  unsigned short nPort)
{
    int  nSock;
    struct hostent *host;
    struct sockaddr_in client_addr;

    if ((host = gethostbyname(pHostName)) == NULL)
    {
#ifdef _DEBUG
        printf("sock_connect gethostbyname() error!\r\n");
#endif
        return 0;
    }

    if ((nSock = (int) socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
#ifdef _DEBUG
        printf("sock_connect socket() error!\r\n");
#endif
        return 0;
    }

    client_addr.sin_family = AF_INET;
    client_addr.sin_port = htons(nPort);
    client_addr.sin_addr = * ((struct in_addr *) host->h_addr);

    memset(&(client_addr.sin_zero), 0, 8) ;
    if (connect(nSock, (struct sockaddr *) &client_addr, sizeof(struct sockaddr)) == -1)
    {
#ifdef _DEBUG
        printf("sock_connect connect() error!\r\n");
#endif
        return 0;
    }

    return (nSock);
}

int sock_close(int nSock)
{
#ifdef WIN32
    return closesocket(nSock);
#else
    return close(nSock);
#endif
}

int sock_send(int nSock, char *pFormat, ...)
{
        char szBuffer[1024];

        va_list argptr;
        va_start(argptr, pFormat);
        vsnprintf(szBuffer, sizeof(szBuffer), pFormat, argptr);
        va_end(argptr);

#ifdef _DEBUG
        printf("%s\r\n",szBuffer);
#endif
        return send(nSock, szBuffer, (int) strlen(szBuffer), 0) ;
}

int sock_read(int nSock, const char *pStop)
{
    int iResult = 0;
    const int nSize = 256;
    char szBuf[256 + 1];

    while  ((iResult = recv(nSock, szBuf, nSize, 0)) > 0) 
    {
        szBuf[iResult] = '\0';

#ifdef _DEBUG
        printf("%s\r\n",szBuf);
#endif

        if  ((pStop) && (strstr(szBuf, pStop) != NULL))
        {
            break;
        }
    }

    return iResult;
}

int SendMail(const char *pHostName, unsigned short nPort, SMTP_MAIL *pMail)
{
    int nSock;
    char szBase64UserName[256];        
    char szBase64Password[256];
    
    sock_start();

    nSock = sock_connect(pHostName, nPort);

    if (nSock)
    {
        sock_read(nSock, "220");
        
        sock_send(nSock, "HELO host_name\r\n");
        sock_read(nSock, "250");

        sock_send(nSock, "EHLO\r\n");
        sock_read(nSock, "250");

        sock_send(nSock, "AUTH LOGIN\r\n") ;
        sock_read(nSock, "334");

        Base64Enc(szBase64UserName, pMail->stHeader.szUserName) ;
        sock_send(nSock, "%s\r\n", szBase64UserName);

        Base64Enc(szBase64Password, pMail->stHeader.szPassword) ;
        sock_send(nSock, "%s\r\n", szBase64Password);

        sock_read(nSock, "235");


        sock_send(nSock, "MAIL FROM: <%s> \r\n", pMail->stHeader.szMailFrom);
        sock_read(nSock, "250") ;

        sock_send(nSock, "RCPT TO: <%s> \r\n", pMail->stHeader.szMailTo);
        sock_read(nSock, "250") ;

        sock_send(nSock,"DATA\r\n") ;
        sock_read(nSock,"354") ;

        sock_send(nSock, "From:%s\r\nTo: %s \r\n", pMail->stHeader.szMailFrom, pMail->stHeader.szMailTo);

        sock_send(nSock, "Subject: %s \r\n", pMail->szSubject);

        sock_send(nSock, "Content-type: %s;charset=%s\r\n", pMail->szContentType, pMail->szCharSet);
        
        sock_send(nSock, "\r\n%s\r\n", pMail->szMailBody);

        sock_send(nSock,"\r\n.\r\n") ; /*end data */
        sock_read(nSock,"250") ;


        sock_send(nSock, "QUIT\r\n") ;
        sock_read(nSock, "221");

        sock_close(nSock);
    }

    sock_end();

    return 0;
}

[/code]

[[i] 本帖最后由 m_lm 于 2007-3-23 13:06 编辑 [/i]]

dajun 发表于 2007-03-23 09:13

sock_read(nSock, "250");

在这个sock_read里处理
如果read的相应不是250就表示出错,其他类似

m_lm 发表于 2007-03-23 11:05

回复 2楼 dajun 的帖子

dajun谢了。这么简单,我怎么没想到:)。

peterdocter 发表于 2008-02-29 11:57

一位楼主可以提供一个完整发邮件代码吗?我参考很多网站的代码都不成功,不知道可否分享大客代码供像我这样的菜的小C初学者做参考学习用?发现大客的不但在linux下能用好像在windows下也可以用?是C还是C++代码?

flw 发表于 2008-02-29 12:12

SMTP 协议要求每条指令的 TCP 包带 push flag。

peterdocter 发表于 2008-02-29 15:07

typedef struct { 
char szUserName[256]="";
char szPassword[256]="";
char szMailFrom[256]="";
char szMailTo[256]="";
char szSubject[256]="";
char szContentType[256]="";
char szContentType[256]="";
char szCharSet[256]="";
char szMailBody[256]="";
}stHeader;
楼主的数据大至结构是这样吗?
SMTP_MAIL *pMail 
^^^^^^^这个是什么?是用define声明?其它大客们有否类似的stmp发送邮件的代码!
我在网上只找到一个:
[url]http://blog.linuxpk.com/8571/viewspace-890[/url]
163/126/tom等没有一个通得过!

flw 发表于 2008-02-29 15:14

呵呵,想要练习收发邮件,强烈建议先从 sohu 的开始,sohu 的邮箱真好啊。
感谢 sohu!

柳五随风 发表于 2008-03-03 11:33

1.HELO/EHLO部分处理的不对
2。对于扩展的ESMTP command,比如AUTH需要验证SMTP Server是否支持该命令。SERVER 支持的ESMTP commands在EHLO命令的返回星系里面可以读到。


你可能感兴趣的:(c,linux,.net,struct,socket,command)