Xcode 编写的程序,程序运行完,给发个电子邮件,求帮助
用Xcode写程序,比较大,运行时间长,有时候要运行很多天,想在main()的最后加一个程序段,当程序运行结束后给发个电子邮件。现在手机和邮箱绑定已经非常普遍了(比如,我...
用Xcode写程序,比较大,运行时间长,有时候要运行很多天,想在main()的最后加一个程序段,当程序运行结束后给发个电子邮件。现在手机和邮箱绑定已经非常普遍了(比如,我用的是中国移动的手机号码,对应的免费来邮提示邮箱是手机号@139.com)。程序运行完,一发邮件,马上就收到短信了,甚至运算结果都可以在附件里看到。这样就不用总是看看窗口,运行完了没有啊,可以去谈个朋友,钓个鱼,摸个虾了什么的了,出差也不用担心了。该程序段对于Xcode编程使用者来说必定是个惊喜!请指教。
展开
1个回答
展开全部
/*
纯c邮件程序,
默认为163邮箱服务器,可修改,
默认需要手动输入帐号及密码,
修改变量为常量即可实现自动使用固定帐号登录服务器,
修改接受邮箱帐号可以向指定邮箱发送邮件
嵌入其他c语言代码中可实现c邮件函数
*/
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <iostream>
#include <string>
#include <stdio.h>
#include <ctime>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
//base64编码
string Base64Encode(LPCTSTR lpszSrc);
//base64解码
string Base64Decode(LPCTSTR lpszSrc);
int main()
{
//1.首先需要连接邮件服务器 这里用socket 邮件服务器端口 25
WSADATA Wsa;
//进行WINSOCK的设置
WSAStartup(0x0101,&Wsa);
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKADDR_IN sin;
LPHOSTENT lphost = gethostbyname("smtp.163.com");//这里是用网易的邮件服务器 也可以修改
if(lphost)
sin.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
printf("%s\n","获取地址失败");
return 1;
}
sin.sin_family = AF_INET;
//注意邮件服务器的侦听端口 25
sin.sin_port = htons(IPPORT_SMTP);
//连接服务器
if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("%s\n","连接错误");
return 1;
}
printf("%s\n","连接成功");
//接收服务器初次回应
char buff[1024];
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
/////上面已经完成连接了/////
string szLine="\r\n";//相当于你按下回车
//2.现在就是和服务器对话了
//问候服务器
string szHelo = "HELO smtp.163.com" + szLine;
printf("我说:%s\n",szHelo.c_str());
send(s,szHelo.c_str(),szHelo.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//请求验证用户密码(需要编码)
string szAL = "auth login" + szLine; //发送验证命令
printf("我说:%s\n",szAL.c_str());
send(s,szAL.c_str(),szAL.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入帐号
//发送帐号
string szUser;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szUser;
szUser = Base64Encode(szUser.c_str()) + szLine; //对输入的帐号进行base64编码
send(s,szUser.c_str(),szUser.length(),0); //发送帐号
printf("我说:%s\n",szUser.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入密码
//发送密码
string szPsw;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szPsw;
szPsw = Base64Encode(szPsw.c_str()) + szLine; //对输入的密码进行base64编码
send(s,szPsw.c_str(),szPsw.length(),0); //发送密码
printf("我说:%s\n",szPsw.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//然后可以用你登陆的邮箱给其他邮箱发邮件了
string szFrom,szTo;
cout<<"from:";//你自己的邮箱
cin>>szFrom;
cout<<"to:"; //发送给谁
cin>>szTo;
//发送者的地址
string From = "mail from:<"+szFrom+ ">"+ szLine;
//收信者地址
string To = "rcpt to:<" + szTo +">" + szLine;
//现在确定看谁发的邮件 往哪发
send(s,From.c_str(),From.length(),0);//from
printf("我说:%s\n",From.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar(); //只是用来暂停一下而已 按任意字母继续
send(s,To.c_str(),To.length(),0); //to
printf("我说:%s\n",To.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//资料应该都看过了吧命令里的data输入后 表示输入邮件内容了
send(s,"data\r\n",6,0); //DATA 命令发送
printf("我说:%s\n","data");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//邮件 下面的信息都是当作内容处理
//邮件头
string szFrom_in = "from:"+szFrom + szLine;
string szTo_in = "to:"+szTo + szLine;
//发送日期
string szDate_in="Date: Sat, 20 Aug 2011 13:39:29 +0800" + szLine;//这里我就直接写上去日期了 为了方便
//邮件标题
string szSubject_in = "Subject:我是邮件标题" + szLine;
//邮件正文
string szBody_in = "我就是传说中的邮件体" + szLine;
string szContent = szFrom_in + szTo_in + szDate_in + szSubject_in;
szContent += szLine;//添加一个空白行
szContent += szBody_in;
//上面是最基本的格式//
send(s,szContent.c_str(),szContent.length(),0); //szContent
printf("我说:%s\n",szContent.c_str());
memset(buff,0,sizeof(buff));
// recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff);
getchar();
//发送完了说明下结束
send(s,".\r\n",3,0); //说明内容结束了
printf("我说:%s\n",".");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//退出服务器连接
send(s,"quit\r\n",6,0); //退出
printf("我说:%s\n","quit");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s 发送邮件成功\n",buff);
return 0;
}
纯c邮件程序,
默认为163邮箱服务器,可修改,
默认需要手动输入帐号及密码,
修改变量为常量即可实现自动使用固定帐号登录服务器,
修改接受邮箱帐号可以向指定邮箱发送邮件
嵌入其他c语言代码中可实现c邮件函数
*/
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <iostream>
#include <string>
#include <stdio.h>
#include <ctime>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
//base64编码
string Base64Encode(LPCTSTR lpszSrc);
//base64解码
string Base64Decode(LPCTSTR lpszSrc);
int main()
{
//1.首先需要连接邮件服务器 这里用socket 邮件服务器端口 25
WSADATA Wsa;
//进行WINSOCK的设置
WSAStartup(0x0101,&Wsa);
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKADDR_IN sin;
LPHOSTENT lphost = gethostbyname("smtp.163.com");//这里是用网易的邮件服务器 也可以修改
if(lphost)
sin.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
printf("%s\n","获取地址失败");
return 1;
}
sin.sin_family = AF_INET;
//注意邮件服务器的侦听端口 25
sin.sin_port = htons(IPPORT_SMTP);
//连接服务器
if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("%s\n","连接错误");
return 1;
}
printf("%s\n","连接成功");
//接收服务器初次回应
char buff[1024];
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
/////上面已经完成连接了/////
string szLine="\r\n";//相当于你按下回车
//2.现在就是和服务器对话了
//问候服务器
string szHelo = "HELO smtp.163.com" + szLine;
printf("我说:%s\n",szHelo.c_str());
send(s,szHelo.c_str(),szHelo.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//请求验证用户密码(需要编码)
string szAL = "auth login" + szLine; //发送验证命令
printf("我说:%s\n",szAL.c_str());
send(s,szAL.c_str(),szAL.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入帐号
//发送帐号
string szUser;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szUser;
szUser = Base64Encode(szUser.c_str()) + szLine; //对输入的帐号进行base64编码
send(s,szUser.c_str(),szUser.length(),0); //发送帐号
printf("我说:%s\n",szUser.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入密码
//发送密码
string szPsw;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szPsw;
szPsw = Base64Encode(szPsw.c_str()) + szLine; //对输入的密码进行base64编码
send(s,szPsw.c_str(),szPsw.length(),0); //发送密码
printf("我说:%s\n",szPsw.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//然后可以用你登陆的邮箱给其他邮箱发邮件了
string szFrom,szTo;
cout<<"from:";//你自己的邮箱
cin>>szFrom;
cout<<"to:"; //发送给谁
cin>>szTo;
//发送者的地址
string From = "mail from:<"+szFrom+ ">"+ szLine;
//收信者地址
string To = "rcpt to:<" + szTo +">" + szLine;
//现在确定看谁发的邮件 往哪发
send(s,From.c_str(),From.length(),0);//from
printf("我说:%s\n",From.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar(); //只是用来暂停一下而已 按任意字母继续
send(s,To.c_str(),To.length(),0); //to
printf("我说:%s\n",To.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//资料应该都看过了吧命令里的data输入后 表示输入邮件内容了
send(s,"data\r\n",6,0); //DATA 命令发送
printf("我说:%s\n","data");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//邮件 下面的信息都是当作内容处理
//邮件头
string szFrom_in = "from:"+szFrom + szLine;
string szTo_in = "to:"+szTo + szLine;
//发送日期
string szDate_in="Date: Sat, 20 Aug 2011 13:39:29 +0800" + szLine;//这里我就直接写上去日期了 为了方便
//邮件标题
string szSubject_in = "Subject:我是邮件标题" + szLine;
//邮件正文
string szBody_in = "我就是传说中的邮件体" + szLine;
string szContent = szFrom_in + szTo_in + szDate_in + szSubject_in;
szContent += szLine;//添加一个空白行
szContent += szBody_in;
//上面是最基本的格式//
send(s,szContent.c_str(),szContent.length(),0); //szContent
printf("我说:%s\n",szContent.c_str());
memset(buff,0,sizeof(buff));
// recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff);
getchar();
//发送完了说明下结束
send(s,".\r\n",3,0); //说明内容结束了
printf("我说:%s\n",".");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//退出服务器连接
send(s,"quit\r\n",6,0); //退出
printf("我说:%s\n","quit");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s 发送邮件成功\n",buff);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询