荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (frozen), 信区: InstallBBS
标  题: 利用SMTP服务器转发信件的bbs发信程序(zz)
发信站: 荔园晨风BBS站 (Mon Dec 31 11:48:48 2001), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjk.bbs@bbs.nju.edu.cn 所发表 】
发信人: zhch (zhch), 信区: BBSDev
标  题: 利用SMTP服务器转发信件的bbs发信程序(zz)
发信站: 南京大学小百合站 (Sun Dec 23 13:46:35 2001), 站内信件

利用SMTP服务器转发信件的bbs发信程序


编译: 设置MAILSERVER, 把它改成本地常用的SMTP服务器.
      cc sendmail.c -o sendmail
      cp sendmail /home/bbs/bin

用法: 把config.h里面的SENDMAIL改成本程序的路径(如/home/bbs/bin/sendmail)
      然后make clean all
      mail.c代码无需改动.

程序很简单, 代码如下, 也可从 http://bbs.nju.edu.cn/download/sendmail.c 下载.

#include "/home/bbs/bbssrc/include/bbs.h"
#include "netinet/in.h"
#include "netdb.h"
#include "sys/types.h"
#define MAILSERVER "xx.xx.xx.xx"

int main(int n, char *cmd[]) {
        if(n<4) {
                printf("usage: sendmail -f mail-from mail-reciever.\r\n");
                exit(0);
        }
        sendmail(cmd[2], cmd[3]);
}

int sendmail(char *from, char *to) {
        struct sockaddr_in blah;
        int fd;
        char buf[1024];
        blah.sin_family=AF_INET;
        blah.sin_addr.s_addr=inet_addr(MAILSERVER);
        blah.sin_port=htons(25);
        fd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(connect(fd, (struct sockaddr *)&blah, 16)<0) {
                printf("Can't connect to the mail server.\r\n");
                return;
        }
        readserver(fd);
        sprintf(buf, "helo bbs.nju.edu.cn\n");
        write(fd, buf, strlen(buf));
        readserver(fd);
        sprintf(buf, "mail from: %s\n", from);
        write(fd, buf, strlen(buf));
        readserver(fd);
        sprintf(buf, "rcpt to: %s\n", to);
        write(fd, buf, strlen(buf));
        readserver(fd);
        write(fd, "data\n", 5);
        readserver(fd);
        while(1) {
                if(fgets(buf, 256, stdin)<=0) break;
                buf[255]=0;
                if(buf[0]=='.' && (buf[1]==10 || buf[1]==13)) continue;
                write(fd, buf, strlen(buf));
        }
        write(fd, "\n.\n", 3);
        readserver(fd);
        write(fd, "quit\n", 5);
        readserver(fd);
}

int readserver(int fd) {
        char buf[256];
        if(read(fd, buf, 256)<=0) {
                printf("Mail server error 1001.\r\n");
                exit(0);
        }
        buf[255]=0;
        if(atoi(buf)>=500) {
                printf("Mail server error: %s.\r\n", buf);
                exit(0);
        }
}
--

zhch.bbs@bbs.nju.edu.cn

※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 127.0.0.1]
--
※ 转寄:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 202.96.144.222]

--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店