用C写邮件收发程序

刚刚抄来的,呵呵

#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment (lib,"ws2_32.lib")
//Global variable
char server[40],to[40],from[40],subject[40],data[1024],szSend[7][2048];
int times;
struct sockaddr_in sa;
void usage(char *name)
{
printf("\n%s by eyas<eyas@patching.net>"
  "\n2001/2/28"
  "\nUsage:%s <ServerIP> <To> <From> <Subject> <Data> <times>"
  "\nExample:%s 202.104.32.230 zhutou@21cn.com hehe@21cn.com hello haha 100\n",
  name,name,name);
return;
}
DWORD WINAPI SendMail(PVOID p)
{
WSADATA wsd;
int net,ret,i,j;
char szBuffer[2048];
if(WSAStartup(MAKEWORD(1,1),&wsd)!=0)
{
 printf("\nFailed to load Winsock library!ErrorCode:%d.",GetLastError());
 ExitProcess(1);
}
net=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(net==INVALID_SOCKET)
{
 printf("\nsocket() failed.ErrorCode:%d.",GetLastError());
 WSACleanup();
 ExitProcess(1);
}
ret=connect(net, (struct sockaddr *) &sa, sizeof sa);
if(ret!=0)
{
 printf("\nconnect() failed.ErrorCode:%d.",GetLastError());
 closesocket(net);
 WSACleanup();
 ExitProcess(1);
}

for(j=0;j<8;j++)
{
 //receive data
 ret=recv(net,szBuffer,2048,0);
 if((ret==0) || (ret==SOCKET_ERROR))
 {
  printf("\nrecv() failed.ErrorCode:%d.",WSAGetLastError());
  break;
 }
 
 if(j==7)
  break;
 echo send data
 printf("%s",szSend[j]);
 send data
 ret=send(net,szSend[j],strlen(szSend[j]),0);
 if((ret==0) || (ret==SOCKET_ERROR))
 {
  printf("\nsend() failed.ErrorCode:%d.",WSAGetLastError());
  break;
 }
}
//free resource
closesocket(net);
WSACleanup();
return 0;
}
int main(int argc,char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
int i;
if(argc!=7)
{
 usage(argv[0]);
 return 1;
}
//gets user input
strncpy(server,argv[1],sizeof(server));
strncpy(to,argv[2],sizeof(to));
strncpy(from,argv[3],sizeof(from));
strncpy(subject,argv[4],sizeof(subject));
strncpy(data,argv[5],sizeof(data));
times=atoi(argv[6]);
strncpy((char *)&sa, "", sizeof sa);
//fill the struct
sa.sin_family=AF_INET;
sa.sin_port=htons(25);
sa.sin_addr.s_addr=inet_addr(server);
///built send data
strcpy(szSend[0],"HELO\n");
strcpy(szSend[1],"MAIL FROM:<");
strncat(szSend[1],from,sizeof(from));
strcat(szSend[1],">\n");
strcpy(szSend[2],"RCPT TO:<");
strncat(szSend[2],to,sizeof(to));
strcat(szSend[2],">\n");
strcpy(szSend[3],"DATA\n");
strcpy(szSend[4],"Subject:");
strncat(szSend[4],subject,sizeof(subject));
strcat(szSend[4],"\nFrom:");
strncat(szSend[4],from,sizeof(from));
strcat(szSend[4],"\n\n");
strncat(szSend[4],data,sizeof(data));
strcat(szSend[4],"\n.\n");
strcpy(szSend[5],"SEND\n");
strcpy(szSend[6],"QUIT\n");
for(i=0;i<times;i++)
{
 hThread=CreateThread(NULL,0,SendMail,(PVOID)NULL,0,&dwThreadId);
 if(hThread==NULL)
 {
  printf("\nCreate thread error.");
  break;
 }
 Sleep(20);
 CloseHandle(hThread);
 printf("\nHave been send %d Email.",i+1);
}
printf("\nWait 5 seconds to exit.");
Sleep(5000);
printf("\nComplete.");
return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的通讯录程序示例,使用 C 语言编: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CONTACTS 100 // 定义联系人结构体 typedef struct { char name[50]; char phone[20]; char email[50]; } Contact; // 定义联系人数组和联系人数 Contact contacts[MAX_CONTACTS]; int num_contacts = 0; // 添加联系人函数 void add_contact() { Contact c; printf("Enter name: "); scanf("%s", c.name); printf("Enter phone: "); scanf("%s", c.phone); printf("Enter email: "); scanf("%s", c.email); contacts[num_contacts++] = c; printf("Contact added successfully!\n"); } // 显示联系人列表函数 void list_contacts() { if (num_contacts == 0) { printf("No contacts found.\n"); } else { printf("Name\t\tPhone\t\tEmail\n"); for (int i = 0; i < num_contacts; i++) { printf("%s\t%s\t%s\n", contacts[i].name, contacts[i].phone, contacts[i].email); } } } // 主函数 int main() { int choice; while (1) { printf("\n"); printf("1. Add contact\n"); printf("2. List contacts\n"); printf("3. Quit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_contact(); break; case 2: list_contacts(); break; case 3: printf("Goodbye!\n"); exit(0); default: printf("Invalid choice.\n"); } } return 0; } ``` 这个程序使用了一个联系人结构体来存储每个联系人的姓名、电话和电子邮件地址。使用一个联系人数组来存储所有联系人,并在添加联系人时将其添加到数组中。程序还提供了一个函数来列出所有联系人的姓名、电话和电子邮件地址。 在主函数中,程序使用一个循环来等待用户输入选择。用户可以选择添加新联系人、列出所有联系人或退出程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值