一个发送邮件的C++库–jwsmtp
接收邮件的,暂时没搞定,不过在SF上找到了这个发送邮件的库文件.它提供了一个比较完整的类,可以简单的调用发送邮件.下面是作者提供的一个例子,不过由于连SMTP发邮件需要密码,所以代码我改了一下.
// This file is part of the jwSMTP library.
//
// jwSMTP library is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// jwSMTP library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with jwSMTP library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// http://johnwiggins.net
// smtplib@johnwiggins.net
//
// http://www.boost.org
//#include <boost\thread\thread.hpp>
#include <iostream>
#include “jwsmtp/jwsmtp.h”
using std::cout;
using std::cin;
using std::string;
void Usage() {
cout << “jwSMTP library demo program\n”
“maildemo <email toaddress> <email fromaddress> <smtpserver>\n”
“ e.g.\n”
“ maildemo recipient@there.com me@server.com mail.server.com\n”;
}
int main(int argc, char* argv[])
{
if(argc != 4) {
Usage();
return 0;
}
cout << “jwSMTP library demo program\n\n”;
string to(argv[1]);
string from(argv[2]);
string smtpserver(argv[3]);
if(to.length() < 2 || from.length() < 2 || smtpserver.length() < 2) {
Usage();
return 0;
}
char str[2048];
cout << “Please enter the subject of the mail\n”;
cin.getline(str, 500);
string subject(str);
strcpy(str, “”);
cout << “Please enter the message body end with \”.\” on a line by itself\n”;
string mailmessage;
while(true) {
cin.getline(str, 2048);
if(!strcmp(str, “.”))
break;
mailmessage += str;
mailmessage += “\r\n”;
strcpy(str, “”);
}
cout << “\nPlease wait sending mail\n”;
// This is how to tell the mailer class that we are using a direct smtp server
// preventing the code from doing an MX lookup on ’smtpserver’ i.e. passing
// false as the last parameter.
jwsmtp::mailer mail(to.c_str(), from.c_str(), subject.c_str(), mailmessage.c_str(),
smtpserver.c_str(), jwsmtp::mailer::SMTP_PORT, false);
mail.username(“suei8423@163.com”);
mail.password(“###”);
// using a local file as opposed to a full path.
mail.attach(“/root/Desktop/223901.jpg”);
// add another recipient (carbon copy)
//mail.addrecipient(“someoneelse@somewhere.net”, mailer::Cc);
// set a new smtp server! This is the same as setting a nameserver.
// this depends on the constructor call. i.e. in the constructor
// If MXLookup is true this is a nameserver
// If MXLookup is false this is an smtp server
//mail.setserver(“mail.somewherefun.com”);
// same again except using an IP address instead.
//mail.setserver(“192.168.0.1″);
// boost::thread thrd(mail);
// thrd.join(); // optional
// or:-
// Use authentication
//mail.username(“testuser”);
//mail.password(“secret”);
// LOGIN authentication by default
// if you want plain as opposed to login authentication
//mail.authtype(jwsmtp::mailer::PLAIN);
mail.operator()();
cout << mail.response() << “\n\n”;
//mail.reset(); // now we can mail someone else.
//mail.setmessage(“flibbletooting”);
//mail.setsubject(“another message same object”);
//mail.attach(“/home/user1/image.gif”);
// or a win example
//mail.attach(“C:\\image.gif”);
//mail.addrecipient(“someoneelseagain@foobar.net”);
//mail.operator ()();
//cout << mail.response() << “\n”;
return 0;
}
作者提供的库要自己编译一次.
在编译例子程序时,WINDOWS的例子可以直接编译,在LINUX下要用类似下面的命令
g++ demo2.cpp -o demo2 -I/usr/local/include/jwsmtp-1.32 /usr/local/lib/libjwsmtp.a
一个发送邮件的C++库–jwsmtp的更多相关文章
- 如何持续集成/交付一个开源.NET函数库到Nuget.org
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...
- Javascript的一个生产PDF的库: unicode和中文问题的解决
Javascript的一个生产PDF的库: unicode和中文问题的解决基于canvas和jspdf库, 实现用javascript的支持中文pdf生成实用工具.参考:http://javascri ...
- C 封装一个简单二叉树基库
引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而 没有遭受到冷 ...
- 一个现代化的JSON库Moshi针对Android和Java
Moshi 是一个现代化的JSON库针对Android和Java.它可以很容易地解析JSON成Java对象: String json = ...; Moshi moshi = new Moshi.Bu ...
- JQuery是继prototype之后又一个优秀的Javascript库
JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...
- 一个发送邮件的java类,包含多种发送方法
import java.util.Calendar;import java.util.Date; import java.util.Properties; import javax.mail.Addr ...
- 介绍一个python视频处理库:moviepy
由于博客园的插件和我自己博客的插件不一致,代码以及视频插入转换很麻烦,所以还是我原来博客的地址查看吧. 介绍一个python视频处理库:moviepy
- android一个下拉放大库bug的解决过程及思考
android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...
- 一个交互式可视化Python库——Bokeh
本篇为<Python数据可视化实战>第十篇文章,我们一起学习一个交互式可视化Python库--Bokeh. Bokeh基础 Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Py ...
随机推荐
- VS2010 安装 Boost 库 1.54
Boost库被称为C++准标准库, 功能很是强大, 下面记录我在VS2010中安装使用Boost库的过程. 首先上官网http://www.boost.org/下载最新的Boost库, 我的版本是1_ ...
- dfs-hdu-4620-Fruit Ninja Extreme
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4620 题目大意: 切水果.给n刀,每刀的时间,每刀切的水果的种类.求能切的最多的刀数,使得每相邻的两 ...
- 在Web Api中快速实现JSonp
本文翻译自:http://www.codeproject.com/Tips/631685/JSONP-in-ASP-NET-Web-API-Quick-Get-Started Concept: 同源策 ...
- WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?
原文:WCF技术剖析之二十: 服务在WCF体系中是如何被描述的? 任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源.同理,一个WCF服务的监听与执行同样需要通过 ...
- 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox
原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结.因为实践是经验的来源,总结 ...
- eclipse不能自己主动弹出提示的解决的方法
曾经碰到过好几次eclipse不能自己主动弹出提示的情况,每次总是弄好之后就不再管它,结果下次遇到同样的问题,又到网上去搜索一大堆答案非常多都不能解决实际问题,费了时间还没有效果,如今这里记录下来下面 ...
- Delphi + Asm - TBits类的学习
技术交流,DH讲解. 在D2010的classes中有个TBits类,这个类主要是位操作的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TBits = class privat ...
- 14.10.3 InnoDB Checkpoints InnoDB 检查点:
14.10.3 InnoDB Checkpoints InnoDB 检查点: 你的log files 变的很大可能会降低磁盘性能在checkpointing的时候, 它通常设置设置log files总 ...
- Windows Azure 安全最佳实践 - 第 2 部分:Azure 提供哪些现成可用的安全机制
在WindowsAzure安全最佳实践 - 部分:深度解析挑战防御对策中,我介绍了威胁形势以及在您的应用程序中采用深度防御的计划. 在本部分中,我将说明 Windows Azure的安全是一项共同责任 ...
- spring Jdbc自己主动获取主键。
学习了下springjdbc,感觉挺有用的,相对来说springjdbc 扩展性相当好了 package com.power.dao; import java.lang.reflect.Paramet ...