日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php邮件代码c语言,C语言实现邮件发送功能(SMTP)源码

發布時間:2023/12/4 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php邮件代码c语言,C语言实现邮件发送功能(SMTP)源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【實例簡介】C 語言編寫的郵件發送器是SMTP協議的源代碼和EXE執行程序均在里面使用VS2013開發環境生成,填寫對應參數即可成功進行郵件發送,不用配置郵件服務器,只需一個支持SMTP協議的郵箱賬號密碼即可

【實例截圖】

【核心代碼】

#include

#include

#include

#pragma comment(lib, "ws2_32.lib")

/**

*連接服務器

*/

SOCKET connect_server(char *host, int port);

void disconnect(SOCKET c);

void send_msg(SOCKET c, char *msg);

void recv_msg(SOCKET c);

char* base64_encode(const char* data, int data_len);

const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /=";

SOCKET connect_server(char *host, int port)

{

WSADATA wd;

int ret = 0;

SOCKET c;

SOCKADDR_IN saddr;

struct hostent *pHostent;

ret = WSAStartup(MAKEWORD(2, 2), &wd);

if (ret != 0)

{

return 0;

}

if (HIBYTE(wd.wVersion) != 2 || LOBYTE(wd.wVersion) != 2)

{

printf("Failed to initialize");

WSACleanup();

return 1;

}

c = socket(AF_INET, SOCK_STREAM, 0);

pHostent = gethostbyname(host);

// printf("%s", inet_ntoa(*((struct in_addr*)pHostent->h_addr_list[0])));

saddr.sin_addr.S_un.S_addr = *((unsigned long*)pHostent->h_addr_list[0]);

saddr.sin_family = AF_INET;

saddr.sin_port = htons(port);

connect(c, (SOCKADDR*)&saddr, sizeof(SOCKADDR));

return c;

}

void disconnect(SOCKET c)

{

closesocket(c);

WSACleanup();

}

void recv_msg(SOCKET c)

{

char text[BUFSIZ];

strnset(text, '\0', BUFSIZ);

recv(c, text, BUFSIZ, 0);

printf("\nrecv:%s\n", text);

}

void send_msg(SOCKET c, char *msg)

{

printf("\nsend:%s\n", msg);

send(c, msg, strlen(msg), 0);

}

char *base64_encode(const char* data, int data_len)

{

//int data_len = strlen(data);

int prepare = 0;

int ret_len;

int temp = 0;

char *ret = NULL;

char *f = NULL;

int tmp = 0;

char changed[4];

int i = 0;

ret_len = data_len / 3;

temp = data_len % 3;

if (temp > 0)

{

ret_len = 1;

}

ret_len = ret_len * 4 1;

ret = (char *)malloc(ret_len);

if (ret == NULL)

{

printf("No enough memory.\n");

exit(0);

}

memset(ret, 0, ret_len);

f = ret;

while (tmp < data_len)

{

temp = 0;

prepare = 0;

memset(changed, '\0', 4);

while (temp < 3)

{

//printf("tmp = %d\n", tmp);

if (tmp >= data_len)

{

break;

}

prepare = ((prepare << 8) | (data[tmp] & 0xFF));

tmp ;

temp ;

}

prepare = (prepare << ((3 - temp) * 8));

//printf("before for : temp = %d, prepare = %d\n", temp, prepare);

for (i = 0; i < 4; i )

{

if (temp < i)

{

changed[i] = 0x40;

}

else

{

changed[i] = (prepare >> ((3 - i) * 6)) & 0x3F;

}

*f = base[changed[i]];

//printf("%.2X", changed[i]);

f ;

}

}

*f = '\0';

return ret;

}

int main(void)

{

char sendbuf[BUFSIZ], recvbuf[BUFSIZ], recv_email[BUFSIZ], subject[BUFSIZ], content[BUFSIZ], email[200], pass[200];

char *pstr = NULL;

char *host = "smtp.163.com";

int port = 25;

SOCKET c;

c = connect_server(host, port);

//接受服務器發來的數據

recv_msg(c);

//跟服務器打招呼

send_msg(c, "helo qq\r\n");

//接受服務器發來的數據

recv_msg(c);

//告訴服務器要登陸

send_msg(c, "auth login\r\n");

//接受服務器發來的數據

recv_msg(c);

//提示用戶輸入郵箱地址

printf("=====login email====\nemail ID:");

scanf("%s", email);

printf("password:");

scanf("%s", pass);

/*************發送郵箱地址和密碼**************/

//加密郵箱地址

pstr = base64_encode(email, strlen(email));

//拼接郵箱地址, 用strcpy是為了省去清空sendbuf

strcpy(sendbuf, pstr);

//加回車換行

strcat(sendbuf, "\r\n\0");

send_msg(c, sendbuf);

//接收返回內容并顯示

recv_msg(c);

//釋放內存,在base64加密函數里面分配的

free(pstr);

//加密郵箱密碼

pstr = base64_encode(pass, strlen(pass));

strcpy(sendbuf, pstr);

strcat(sendbuf, "\r\n\0");

send_msg(c, sendbuf);

recv_msg(c);

free(pstr);

/**************填寫收件人,發件人信息***********************/

//告訴服務器發件人是誰

strcpy(sendbuf, "mail from:

strcat(sendbuf, email);

strcat(sendbuf, ">");

strcat(sendbuf, "\r\n\0");

send_msg(c, sendbuf);

recv_msg(c);

//告訴服務器收件人是誰

printf("Please enter the recipient mailbox:");

scanf("%s", recv_email);

strcpy(sendbuf, "rcpt to:

strcat(sendbuf, recv_email);

strcat(sendbuf, ">");

strcat(sendbuf, "\r\n\0");

send_msg(c, sendbuf);

recv_msg(c);

/******************發送郵件內容*********************************/

send_msg(c, "data\r\n");

recv_msg(c);

printf("please enter the title:");

scanf("%s", subject);

printf("please enter the content:");

scanf("%s", content);

//這里填寫發件人,可以隨便填寫,可用于偽造郵件

strcpy(sendbuf, "From: ");

strcat(sendbuf, email);

strcat(sendbuf, "\n");

strcat(sendbuf, "To: ");

strcat(sendbuf, recv_email);

strcat(sendbuf, "\n");

//發送標題和內容

strcat(sendbuf, "subject:");

strcat(sendbuf, subject);

strcat(sendbuf, "\r\n\r\n");

strcat(sendbuf, content);

strcat(sendbuf, "\r\n.\r\n\0");

send_msg(c, sendbuf);

recv_msg(c);

disconnect(c);

printf("mail is already send to:%s\n", recv_email);

return 0;

}

總結

以上是生活随笔為你收集整理的php邮件代码c语言,C语言实现邮件发送功能(SMTP)源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。