Xcode 编写的程序,程序运行完,给发个电子邮件,求帮助

用Xcode写程序,比较大,运行时间长,有时候要运行很多天,想在main()的最后加一个程序段,当程序运行结束后给发个电子邮件。现在手机和邮箱绑定已经非常普遍了(比如,我... 用Xcode写程序,比较大,运行时间长,有时候要运行很多天,想在main()的最后加一个程序段,当程序运行结束后给发个电子邮件。现在手机和邮箱绑定已经非常普遍了(比如,我用的是中国移动的手机号码,对应的免费来邮提示邮箱是手机号@139.com)。程序运行完,一发邮件,马上就收到短信了,甚至运算结果都可以在附件里看到。这样就不用总是看看窗口,运行完了没有啊,可以去谈个朋友,钓个鱼,摸个虾了什么的了,出差也不用担心了。该程序段对于Xcode编程使用者来说必定是个惊喜!请指教。 展开
 我来答
楊online
2013-05-24 · TA获得超过387个赞
知道小有建树答主
回答量:362
采纳率:100%
帮助的人:259万
展开全部
/*
纯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;

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式