c++调用python发送邮件

来源:互联网 发布:大数据前沿技术应用 编辑:程序博客网 时间:2024/06/13 04:02

python代码

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerdef SendEmail(addr,content):       # 第三方 SMTP 服务    mail_host="smtp.sina.com"  #设置服务器    mail_user="hanliangwei123@sina.com"    #用户名    mail_pass="*******"   #密码     sender = 'hanliangwei123@sina.com'    receivers = [str(addr)]  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱        message = MIMEText(content, 'plain', 'utf-8')    subject = 'Mr.HLW 邮件'    message['Subject'] = Header(subject, 'utf-8')    try:        smtpObj = smtplib.SMTP()         smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号        smtpObj.login(mail_user,mail_pass)        smtpObj.sendmail(sender, receivers, message.as_string())        print ("邮件发送成功")    except smtplib.SMTPException:        print ("Error: 无法发送邮件")
c++代码

#include <Python.h>#include<iostream>using namespace std;int  SendEmail(char addr[], char content[]){Py_Initialize();if (!Py_IsInitialized())//检测是否已初始化,成功返回0{cout << "初始化失败!!" << endl;system("pause");return -1;}//PyRun_SimpleString实际上是一个宏,执行一段Python代码。PyObject *pModule, *pDict, *pFunc, *pArgs;pModule = PyImport_ImportModule("Email");if (!pModule){cout << "找不到Email.py,或打开失败!" << endl;system("pause");return -1;}pDict = PyModule_GetDict(pModule);//相当于Python模块对象的__dict__属性,得到模块名称空间下的字典对象。if (!pDict){return -1;}pFunc = PyDict_GetItemString(pDict, "SendEmail");if (!pFunc || !PyCallable_Check(pFunc)){cout << "找不到SendEmail函数" << endl;system("pause");return -1;}pArgs = PyTuple_New(2);//参数为元组长度,也就是参数个数   /*int PyTuple_SetItem( PyObject *p, Py_ssize_t pos, PyObject *o)   其参数含义如下所示。   p:所进行操作的元组。   pos:所添加项的位置索引。   o:所添加的项值。*/   //Py_BuildValue把C++的变量转换成一个Python对象。当需要从C++传递变量到Python时,就会使用这个函数PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", addr));//i相当于c里面的%dPyTuple_SetItem(pArgs, 1, Py_BuildValue("s", content));// 调用Python函数PyObject_CallObject(pFunc, pArgs);Py_Finalize();//清理工作  //Py_DECREF(pModule);  //Py_DECREF(pDict);  //Py_DECREF(pFunc);  //Py_DECREF(pArgs);}int main(int argc, char** argv){SendEmail("835126606@qq.com", "Test Email!");system("pause");return 0;}

注:调用时首先配置好环境。如果python是 x64  那么在c++调试器中也要使用64位的

配置环境见:http://blog.csdn.net/hlw0522/article/details/51869152

0 0