2014-12-06 27 views
1

如何通过使用c套接字的postfix发送电子邮件? 如何创建消息proggramly如何通过使用c套接字的postfix发送电子邮件?

struct sockaddr_in addr; 
char message[] = "MAIL From: [email protected]\n \"[email protected]\"\n\"Test mail\"\n\"This is a test email\""; 
char buf[512]; 
//creating socket 

int sock = socket(AF_INET, SOCK_DGRAM , 0); 
//address parameters 

addr.sin_family = AF_INET; 
//connection port 
addr.sin_port = htons(8); 

// Inet 127.0.0.1. 
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 

sendto(sock, message, sizeof(message), 0, (struct sockaddr *)&addr, sizeof(addr)); 
close(sock); 
+0

这不是一个答案,因此我会把在这里;我想建议使用实际库发送邮件intead。 – LyingOnTheSky 2014-12-06 23:05:35

+0

是的,库是好的,我的任务是使用套接字 – 2014-12-06 23:07:47

+0

哎呀我没明白,* postfix *是库,没关系。 – LyingOnTheSky 2014-12-06 23:10:23

回答

-1

找到解决方案

#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <string.h> 

int main(int argc, char** argv) 
{ 
    int i; 
    struct sockaddr_in addr; 
    //commands for server 
    char* commands[] = {"eclo localhost\n", "mail from:[email protected]\n", "rcpt to:[email protected]\n", "data\n", "Subject: Тест\n\nТест\n", "\n.\n", "quit\n"}; 



    //creating socket 
    int sock = socket(AF_INET, SOCK_STREAM , 0); 
    if(sock < 0) 
    { 
     perror("error with creation of socket"); 
     return -errno; 
    } 

    //parameters 
    addr.sin_family = AF_INET; 
    //port 25 
    addr.sin_port = htons(25); 

    // Inet 127.0.0.1. 
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 

    //connecting to server 
    if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) 
    { 
    perror("error with creation of socket"); 
     return -errno; 
    } 

    //sending commands 
    for(i = 0; i < sizeof(commands)/4; i++) 
     send(sock, commands[i], strlen(commands[i]), 0); 

    //closing connection 
    close(sock); 

    return (EXIT_SUCCESS); 
} 
+0

这些命令部分错误(“eclo”而不是“ehlo”,“\ n”而不是“\ r \ n”等),并且您甚至没有检查服务器的响应。这只适用于宽容服务器,其他人可能会拒绝发送,甚至可能将您的IP列为垃圾邮件发送者。请查看[SMTP协议](http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol)了解如何完成此操作。 – 2014-12-07 07:04:37

相关问题