本文目錄一覽:
- 1、C語言編程,給定一個Email地址,判斷其是否合法
- 2、如何用c語言來識別電子郵箱是否正確
- 3、郵件發送程序客戶端(C語言源代碼)
- 4、c語言中錄入郵箱信息的時候定義什麼類型?
- 5、編寫一個C語言程序,顯示自己的學號,姓名,班級和電子郵箱
- 6、C語言發送郵件
C語言編程,給定一個Email地址,判斷其是否合法
#includestdio.h
#includestring.h
int FormatCheck(char *);
char * SplitByAt(char * ,int);
char * CharsCheck(char *);
#define N 1024
int main()
{
char str[N],*field;
memset(str,0x00,N);
scanf(“%s”,str);
field=SplitByAt(str,N);
if(field==NULL)
{
printf(“NO\n”);
return -1;
}
else if(FormatCheck(str)FormatCheck(field))
{
printf(“YES\n”);
return 0;
}
else
{
printf(“NO\n”);
return -1;
}
}
/**
*校驗域名/郵箱格式
*/
int FormatCheck(char *str)
{
char *p;
for(;;)
{
p=CharsCheck(str);
if(p==str)
{
return 0;
}
else if(*p==’\0′)
{
return 1;
}
else if(*p!=’.’)
{
return 0;
}
p++;
str=p;
}
}
/**
*校驗是否可用@分割為兩段,返回域名首地址,不合要求返回NULL
*參數:str,源字符串,length,長度限制(防越界)
*函數會用’\0’代替源字符串第一個’@’,已完成郵箱,域名分割.
*/
char *SplitByAt(char *str,int length)
{
char *p=strchr(str,’@’);
if(p!=NULL(p-str)length)
{
*p=0;
p++;
return p;
}
return NULL;
}
/**
*校驗str是否為連續的’a’-‘z’,’A’-‘Z’,’0′-‘9’字符
*返回值:第一個不合要求的字符所處位置
*例如:str=”abc”,返回str+3; str=”a#bc”,返回str+1;
*/
char * CharsCheck(char *str)
{
while((*str=’a’*str=’z’)||
(*str=’A’*str=’Z’)||
(*str=’0’*str=’9′)||
*str==’_’)
{
str++;
}
return str;
}
要求沒有提’_’符號的特殊規則, 所以”__.__@_”這樣的email也是能校驗過的.
如何用c語言來識別電子郵箱是否正確
最簡單的方式是使用正則表達式。檢測郵箱格式的正則表達式:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$。
1、標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數庫。
2、C/C++ 中使用正則表達式一般分為三步:
1)編譯正則表達式 regcomp()
int regcomp (regex_t *compiled, const char *pattern, int cflags)
這個函數把指定的正則表達式pattern編譯成一種特定的數據格式compiled,這樣可以使匹配更有效。函數regexec 會使用這個數據在目標文本串中進行模式匹配。執行成功返回0。
2)匹配正則表達式 regexec()
int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)
當編譯好正則表達式後,就可以用regexec 匹配我們的目標文本串了,如果在編譯正則表達式的時候沒有指定cflags的參數為REG_NEWLINE,則默認情況下是忽略換行符的,也就是把整個文本串當作一個字符串處理。執行成功返回0。
3)釋放正則表達式 regfree()
void regfree (regex_t *compiled)
當使用完編譯好的正則表達式後,或者要重新編譯其他正則表達式的時候,可以用這個函數清空compiled指向的regex_t結構體的內容。請注意,如果是重新編譯的話,一定要先清空regex_t結構體。
郵件發送程序客戶端(C語言源代碼)
SMTP協議是用於發送電子郵件的主要通信協議,是C語言進行網絡編程時經常都會使用到的基礎協議之一。郵件發送客戶端程序要求使用C語言socket通信來完成SMTP協議,實現郵件發送程序的客戶端應用,通過該程序能夠向遠程的SMTP服務器發送電子郵件的請求,並發送到指定的電子郵箱之中。 第一階段:只要求通過dos窗口實現簡單文本郵件的發送,具體的要求如下: 程序啟動後錄入SMTP服務器地址; 錄入SMTP服務器用戶名和密碼; 錄入收件人地址和抄送人地址(允許錄入多個,中間以分號分隔); 錄入郵件主題; 錄入郵件內容完成後發送郵件; 郵件發送成功後系統提供郵件發送成功; 第二階段:要求能夠實現發送MIME格式郵件或利用Win32編程將程序升級為桌面應用程序,進入第二階段必須滿足以下條件: 必須是在充分理解SMTP協議的基礎上; 必須是在充分理解MIME格式的基礎上; 利用C語言將發送的內容格式化為MIME格式; 可以首先考慮只實現MIME格式的一部分格式化需求; 升級桌面應用程序必須對Win32 API有一定的理解和掌握;
c語言中錄入郵箱信息的時候定義什麼類型?
那要看你記錄的信息內容。
一、單純記錄郵箱地址 ,一個字符串即可。
二、記錄並驗證郵箱,字符串數組,把地址里的用戶名和域名分開來放,用於服務器查詢。(當然用一個字符串保存,查詢時再拆分也可)。
三、複合結構 ,比如註冊的郵箱信息,包含賬戶,密碼,真實姓名,電話等等。需定義結構體來保存。
編寫一個C語言程序,顯示自己的學號,姓名,班級和電子郵箱
此類程序,沒有額外要求情況下,直接打印即可。
如
學號:12345
姓名:趙手快
班級:一年一班
電子郵箱:youxiang@xxx.xx
那麼直接輸出:
int main()
{
printf(“學號:12345\n”);
printf(“姓名:趙手快\n”);
printf(“班級:一年一班\n”);
printf(“電子郵箱:youxiang@xxx.xx\n”);
}
這樣就是符合需求的了。
C語言發送郵件
基本框架就是這,需要其他功能自己添加吧
C語言實現簡單的SMTP發送郵件
#include windows.h
#include stdio.h
#include WinSock.h
#include iostream
using namespace std;
#pragma comment(lib, “ws2_32.lib”)
struct Base64Date6
{
unsigned int d4:6;
unsigned int d3:6;
unsigned int d2:6;
unsigned int d1:6;
};
// 協議中加密部分使用的是base64方法
char ConvertToBase64 (char c6);
void EncodeBase64 (char *dbuf, char *buf128, int len);
void SendMail (char *email,char *body);
int OpenSocket (struct sockaddr *addr);
int main()
{
char EmailTo[] = “hanyinlong@126.com”;
char EmailContents[] = “From: \”lucy\”hanyinlong@126.com\r\n”
“To: \”dasiy\”hanyinlong@126.com\r\n”
“Subject: Hello\r\n\r\n”
“Hello World, Hello Email!”;
SendMail(EmailTo, EmailContents);
return 0;
}
char ConvertToBase64(char uc)
{
if(uc 26)
{
return ‘A’ + uc;
}
if(uc 52)
{
return ‘a’ + (uc – 26);
}
if(uc 62)
{
return ‘0’ + (uc – 52);
}
if(uc == 62)
{
return ‘+’;
}
return ‘/’;
}
// base64的實現
void EncodeBase64(char *dbuf, char *buf128, int len)
{
struct Base64Date6 *ddd = NULL;
int i = 0;
char buf[256] = {0};
char *tmp = NULL;
char cc = ‘\0’;
memset(buf, 0, 256);
strcpy_s(buf, 256, buf128);
for(i = 1; i = len/3; i++)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd-d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd-d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd-d3);
dbuf[(i-1)*4+3] = ConvertToBase64((unsigned int)ddd-d4);
}
if(len % 3 == 1)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd-d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd-d2);
dbuf[(i-1)*4+2] = ‘=’;
dbuf[(i-1)*4+3] = ‘=’;
}
if(len%3 == 2)
{
tmp = buf+(i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd-d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd-d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd-d3);
dbuf[(i-1)*4+3] = ‘=’;
}
return;
}
// 發送郵件
void SendMail(char *email, char *body)
{
int sockfd = {0};
char buf[1500] = {0};
char rbuf[1500] = {0};
char login[128] = {0};
char pass[128] = {0};
WSADATA WSAData;
struct sockaddr_in their_addr = {0};
WSAStartup(MAKEWORD(2, 2), WSAData);
memset(their_addr, 0, sizeof(their_addr));
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(25);
hostent* hptr = gethostbyname(“smtp.126.com”);
memcpy(their_addr.sin_addr.S_un.S_addr, hptr-h_addr_list[0], hptr-h_length);
printf(“IP of smpt.126.com is : %d:%d:%d:%d\n”,
their_addr.sin_addr.S_un.S_un_b.s_b1,
their_addr.sin_addr.S_un.S_un_b.s_b2,
their_addr.sin_addr.S_un.S_un_b.s_b3,
their_addr.sin_addr.S_un.S_un_b.s_b4);
// 連接郵件服務器,如果連接後沒有響應,則2 秒後重新連接
sockfd = OpenSocket((struct sockaddr *)their_addr);
memset(rbuf, 0, 1500);
while(recv(sockfd, rbuf, 1500, 0) == 0)
{
cout”reconnect…”endl;
Sleep(2);
sockfd = OpenSocket((struct sockaddr *)their_addr);
memset(rbuf, 0, 1500);
}
coutrbufendl;
// EHLO
memset(buf, 0, 1500);
sprintf_s(buf, 1500, “EHLO HYL-PC\r\n”);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”EHLO REceive: “rbufendl;
// AUTH LOGIN
memset(buf, 0, 1500);
sprintf_s(buf, 1500, “AUTH LOGIN\r\n”);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Auth Login Receive: “rbufendl;
// USER
memset(buf, 0, 1500);
sprintf_s(buf, 1500, “hanyinlong@126.com”);//你的郵箱賬號
memset(login, 0, 128);
EncodeBase64(login, buf, strlen(buf));
sprintf_s(buf, 1500, “%s\r\n”, login);
send(sockfd, buf, strlen(buf), 0);
cout”Base64 UserName: “bufendl;
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”User Login Receive: “rbufendl;
// PASSWORD
sprintf_s(buf, 1500, “XXXXXXXXXXXX”);//你的郵箱密碼
memset(pass, 0, 128);
EncodeBase64(pass, buf, strlen(buf));
sprintf_s(buf, 1500, “%s\r\n”, pass);
send(sockfd, buf, strlen(buf), 0);
cout”Base64 Password: “bufendl;
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Send Password Receive: “rbufendl;
// MAIL FROM
memset(buf, 0, 1500);
sprintf_s(buf, 1500, “MAIL FROM: hanyinlong@126.com\r\n”);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”set Mail From Receive: “rbufendl;
// RCPT TO 第一個收件人
sprintf_s(buf, 1500, “RCPT TO:%s\r\n”, email);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Tell Sendto Receive: “rbufendl;
// DATA 準備開始發送郵件內容
sprintf_s(buf, 1500, “DATA\r\n”);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Send Mail Prepare Receive: “rbufendl;
// 發送郵件內容,\r\n.\r\n內容結束標記
sprintf_s(buf, 1500, “%s\r\n.\r\n”, body);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Send Mail Receive: “rbufendl;
// QUIT
sprintf_s(buf, 1500, “QUIT\r\n”);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout”Quit Receive: “rbufendl;
//清理工作
closesocket(sockfd);
WSACleanup();
return;
}
// 打開TCP Socket連接
int OpenSocket(struct sockaddr *addr)
{
int sockfd = 0;
sockfd=socket(PF_INET, SOCK_STREAM, 0);
if(sockfd 0)
{
cout”Open sockfd(TCP) error!”endl;
exit(-1);
}
if(connect(sockfd, addr, sizeof(struct sockaddr)) 0)
{
cout”Connect sockfd(TCP) error!”endl;
exit(-1);
}
return sockfd;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/199336.html