您的位置:首页 > 编程语言 > C语言/C++

c++调用python发送邮件

2016-08-15 11:11 405 查看
python代码

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def 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里面的%d
PyTuple_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: