精华内容
下载资源
问答
  • 能发邮件临时邮箱

    万次阅读 2019-09-12 21:00:44
    邮件的收、发是一个邮箱应该具备的最基本功能,免费的临时邮箱或一次性邮箱虽然有很多,但支持邮件发送的屈指可数,Guerrilla Mail于2006年建立,支持中文、英文、法语、西班牙语、日语等多种语言,并提供安卓客户端...

    邮件的收、发是一个邮箱应该具备的最基本功能,免费的临时邮箱或一次性邮箱虽然有很多,但支持邮件发送的屈指可数,Guerrilla Mail于2006年建立,支持中文、英文、法语、西班牙语、日语等多种语言,并提供安卓客户端,还可以通过TOR网络访问。

    邮箱的使用非常简单,打开邮箱网址www.guerrillamail.com就会自动生成一个持续60分钟的免费临时邮箱,邮箱地址可以自己设定,也可以使用系统自动生成的随机地址。
    在这里插入图片描述

    • 收件箱

    收到邮件后可回复、转发以及查看邮件原始源码。

    • COMPOSE

    每次只能添加一个邮箱地址,不支持抄送及密送,可添加附件,最大支持150MB,24小时后自动删除。

    • TOOLS

    用于生成密码,输入“Domain”和“Master Passphrass”自动生成密码。

    • 简介

    就是简介。

    如果想使用自己的域名可通过https://grr.la/ryo/guerrillamail.com/edit注册账户进行设置。除此之外,Guerrilla Mail也是一个开源项目,源码托管于Github: https://github.com/flashmob/go-guerrilla,可自己搭建服务器。

    展开全文
  • SpringBoot 集成 E-mail发送邮件,供大家参考,具体内容如下JDK本身有自带发送邮件api,加上SpringBoot在进行封装,使得现在使用起来十分快速简洁。话不多说,参考纯洁的微笑博客,更改jar版本为2.0.4 开干,基本没...

    SpringBoot 集成 E-mail发送邮件,供大家参考,具体内容如下

    JDK本身有自带发送邮件api,加上SpringBoot在进行封装,使得现在使用起来十分快速简洁。

    话不多说,参考纯洁的微笑博客,更改jar版本为2.0.4 开干,基本没什么坑。

    就是配置邮箱账号密码是,如果是qq邮箱,需要开启PO30和STMP服务,并且获取临时授权码。

    开启服务链接:

    https://mail.qq.com/cgi-bin/frame_html?sid=a5ZSbreeNm9pHyl1&r=a83225170e94773c650a460c10f7a05c

    与Springboot集成

    导入jar包

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.0.4.RELEASE'

    compile 'org.springframework.boot:spring-boot-starter-thymeleaf:2.0.4.RELEASE'

    配置邮箱

    #邮箱服务器地址,各大运营商不同

    spring.mail.host=smtp.qq.com

    #用户名

    spring.mail.username=9118542413@qq.com

    #密码,如果是qq的,要申请临时授权码

    spring.mail.password=faw124awfawfawg

    spring.mail.default-encoding=UTF-8

    #以谁来发送邮件

    mail.fromMail.addr=9118542413@qq.com

    发送各种类型的邮件

    @Service

    @Slf4j

    public class MailServiceImpl implements MailService {

    @Autowired

    private JavaMailSender mailSender;

    /**

    * The Template engine.

    */

    @Autowired

    TemplateEngine templateEngine;

    @Value("${mail.fromMail.addr}")

    private String from;

    @Override

    public void sendSimpleMail(String to, String subject, String content) {

    SimpleMailMessage message = new SimpleMailMessage();

    message.setFrom(from);

    message.setTo(to);

    message.setSubject(subject);

    message.setText(content);

    try {

    mailSender.send(message);

    log.info("简单邮件已经发送。");

    } catch (Exception e) {

    log.error("发送简单邮件时发生异常!", e);

    }

    }

    @Override

    public void sendHtmlMail(String to, String subject, String content) {

    MimeMessage message = mailSender.createMimeMessage();

    try {

    //true表示需要创建一个multipart message

    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setFrom(from);

    helper.setTo(to);

    helper.setSubject(subject);

    helper.setText(content, true);

    mailSender.send(message);

    log.info("html邮件发送成功");

    } catch (MessagingException e) {

    log.error("发送html邮件时发生异常!", e);

    }

    }

    @Override

    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {

    MimeMessage message = mailSender.createMimeMessage();

    try {

    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setFrom(from);

    helper.setTo(to);

    helper.setSubject(subject);

    helper.setText(content, true);

    FileSystemResource file = new FileSystemResource(new File(filePath));

    String fileName = filePath.substring(filePath.lastIndexOf(File.separator) + 1);

    helper.addAttachment(fileName, file);

    mailSender.send(message);

    log.info("带附件的邮件已经发送。");

    } catch (MessagingException e) {

    log.error("发送带附件的邮件时发生异常!", e);

    }

    }

    @Override

    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {

    MimeMessage message = mailSender.createMimeMessage();

    try {

    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setFrom(from);

    helper.setTo(to);

    helper.setSubject(subject);

    helper.setText(content, true);

    FileSystemResource res = new FileSystemResource(new File(rscPath));

    helper.addInline(rscId, res);

    mailSender.send(message);

    log.info("嵌入静态资源的邮件已经发送。");

    } catch (MessagingException e) {

    log.error("发送嵌入静态资源的邮件时发生异常!", e);

    }

    }

    @Override

    public void sendTemplateMail(String to, String subject, String template, Context context) {

    String emailContent = templateEngine.process(template, context);

    sendHtmlMail("15017263512@163.com", "主题:这是模板邮件", emailContent);

    }

    }

    测试类:

    @RunWith(SpringRunner.class)

    @SpringBootTest

    public class EmailServiceTest {

    @Autowired

    MailService mailService;

    @Test

    public void sendSimpleMailTest() {

    mailService.sendSimpleMail("15017263512@163.com","test simple mail"," hello this is simple mail");

    }

    @Test

    public void sendHtmlMailTest(){

    String content="\n" +

    "

    \n" +

    "

    hello world ! 这是一封Html邮件!

    \n" +

    "\n" +

    "";

    mailService.sendHtmlMail("15017263512@163.com","test html mail",content);

    }

    @Test

    public void sendAttachmentsMail(){

    String filePath="E:\\var\\log\\elkTest\\error\\2018-11-30.log";

    mailService.sendAttachmentsMail("15017263512@163.com", "主题:带附件的邮件", "有附件,请查收!", filePath);

    }

    @Test

    public void sendInlineResourceMail() {

    String rscId = "neo006";

    String content="

    这是有图片的邮件:";

    String imgPath = "C:\\Users\\Admin\\Pictures\\Camera Roll\\9499189867_1476052069.jpg";

    mailService.sendInlineResourceMail("15017263512@163.com", "主题:这是有图片的邮件", content, imgPath, rscId);

    }

    @Test

    public void sendTemplateMail() {

    //创建邮件正文

    Context context = new Context();

    context.setVariable("id", "006");

    mailService.sendTemplateMail("15017263512@163.com","主题:这是模板邮件",

    "emailTemplate",context);

    }

    }

    上面的邮箱和密码是我乱填的,注意自己更改。

    项目源码以上传至GitHub

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 直接上工具 ...解决一些平时注册网站时各式各样的邮件骚扰等问题,无需注册,直接拿来用,邮箱24小时有效,完全可以接受一些验证码之类的。 例如: http://dy.yunxdr.top/ 这是我...发送邮件后就会收到相应的验证: ...

    直接上工具

    网址:http://24mail.chacuo.net/
    解决一些平时注册网站时各式各样的邮件骚扰等问题,无需注册,直接拿来用,邮箱24小时有效,完全可以接受一些验证码之类的。
    例如:
    http://dy.yunxdr.top/ 这是我的一个电影网站,注册账号时需要邮箱验证。直接复制上面的邮箱即可。

    在这里插入图片描述
    在这里插入图片描述
    发送邮件后就会收到相应的验证:
    在这里插入图片描述

    展开全文
  • 0、有关TLS和SSL SSL/TLS是用来加密邮件流的。假设不加密的话非常easy被人破解。 ...只是既然是要发送广告邮件,这个就不用在意了,...这里临时仅仅是使用163的邮箱,作为发送端 1、基本的类 SendMa...

    0、有关TLS和SSL

    SSL/TLS是用来加密邮件流的。

    假设不加密的话非常easy被人破解。



    只是既然是要发送广告邮件,这个就不用在意了,使用没加密的即可。

    另外在使用的时候,发现,qq的邮箱须要使用SSL才干连接上,这个再以后须要用qq发群邮件的时候再来处理。这里临时仅仅是使用163的邮箱,作为发送端

    1、基本的类

    SendMail.h:
    /***********************************************************************
    *发送邮件模块头文件
    *能够发送文本和附件(支持多个附件一起发送)
    *************************************************************************/
    
    #ifndef  __INCLUDE_SEND_MAIL_H__
    #define  __INCLUDE_SEND_MAIL_H__
    
    
    #include "vector"
    using namespace std;
    
    #include "atlenc.h"
    #include "winsock2.h"
    
    #pragma comment(lib, "wsock32.lib")
    
    
    struct sMailInfo					//邮件信息
    {
    	char *mailbox_user_name;		//用户登录邮箱的名称
    	char *mailbox_user_pwd;			//用户登录邮箱的password
    	char *mailbox_sender_show_name;	//用户发送时显示的名称
    	char *mailbox_sender;			//发送者的邮箱地址
    	char *mailbox_receiver;			//接收者的邮箱地址
    	char *mail_title;				//邮箱标题
    	char *mail_body;				//邮件文本正文
    	char mail_server_ip_addr[32];	//服务器的IP
    	char *mail_server_name;			//服务器的名称(IP与名称二选一,优先取名称)
    	sMailInfo() { memset(this, 0, sizeof(sMailInfo)); }
    };
    
    
    class CSendMail
    {
    public:
    	CSendMail(void);
    	~CSendMail(void);
    
    public:
    	bool BeginSendMail(sMailInfo &smail_info);	//发送邮件,须要在发送的时候初始化邮件信息
    	void AddFilePath(char *file_path);			//加入附件的决定路径到附件列表中
    	void DeleteFilePath(char *file_path);		//删除附件路径,假设有的话
    	void DeleteAllPath(void);					//删除所有附件的路径
    
    protected:
    	void GetFileName(char *file_name, char *file_path);	//从附件的路径中获取文件名
    	void Char2Base64(char *buff_64, char *src_buff, int length);//把char类型转换成Base64类型
    	bool CReateSocket(SOCKET &sock);			//建立socket连接
    	bool Logon(SOCKET &sock);					//登录邮箱。主要进行发邮件前的准备工作
    	int GetFileData(char *file_path);			//由文件路径获取附件内容
    
    	bool SendHead(SOCKET &sock);				//发送邮件头
    	bool SendTextBody(SOCKET &sock);			//发送邮件文本正文
    	bool SendFileBody(SOCKET &sock);			//发送邮件附件
    	bool SendEnd(SOCKET &sock);					//发送邮件结尾
    
    protected:
    	vector<char *> file_path_list_;				//记录附件路径
    	char  send_buff_[4096];						//发送缓冲区
    	char  receive_buff_[1024];
    	char *file_buffer_;							// 指向附件的内容
    	sMailInfo mail_info_;
    };
    
    
    #endif
    


    SendMail.cpp:
    /************************************************************************
    * 发送邮件模块
    *能够发送文本和附件(支持多个附件一起发送)
    *Date:2011-12-01
    ************************************************************************/
    #include "StdAfx.h"
    #include "fstream"
    using namespace std;
    
    #include "SendMail.h"
    
    
    CSendMail::CSendMail(void)
    {
    	file_buffer_ = NULL;
    	memset(send_buff_, 0, sizeof(send_buff_));
    	memset(receive_buff_, 0, sizeof(receive_buff_));
    }
    
    
    CSendMail::~CSendMail(void)
    {
    	DeleteAllPath();
    }
    
    
    void CSendMail::Char2Base64(char* buff_64, char* src_buff, int length)
    {
    	//1   1   1   1   1   1   1   1
    	// 分配给pBuff64  ↑ 分配给pBuff64+1
    	// point所在的位置
    	static char base_64_encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//base64所映射的字符表
    	int point;		// 每个源字符拆分的位置,可取2,4,6。初始为2
    	point = 2;
    	int base_index; // base64字符的索引
    	char n = 0;		// 上一个源字符的残留值
    	for(int index = 0; index < length; index++)
    	{
    		if(point == 2)
    		{
    			base_index = ((*src_buff) >> point) & 0x3f; // 取得pSrcBuff的高point位
    		}
    		else if (point == 4)
    		{
    			base_index = ((*src_buff) >> point) & 0xf;	// 取得pSrcBuff的高point位
    		}
    		else if(point == 6)
    		{
    			base_index = ((*src_buff) >> point) & 0x3;	// 取得pSrcBuff的高point位
    		}
    		base_index += n;								// 与pSrcBuff-1的低point结合组成Base64的索引
    		*buff_64++ = base_64_encode[base_index];		// 由索引表得到pBuff64
    		n = ((*src_buff) << (6 - point));				// 计算源字符中的残留值
    		n = n & 0x3f;									//确保n的最高两位为0
    		point += 2;										//源字符的拆分位置上升2
    		if(point == 8)		//假设拆分位置为8说明pSrcBuff有6位残留。能够组成一个完整的Base64字符。所以直接再组合一次
    		{
    			base_index = (*src_buff) & 0x3f;			//提取低6位。这就是索引了
    			*buff_64++ =base_64_encode[base_index];
    			n = 0;			// 残留值为0
    			point = 2;		// 拆分位置设为2
    		}
    		src_buff++;
    
    	}
    	if(n != 0)
    	{
    		*buff_64++ = base_64_encode[n];
    	}
    	if(length % 3  == 2)	// 假设源字符串长度不是3的倍数要用'='补全
    	{
    		*buff_64 = '=';
    	}
    	else if(length % 3 == 1)
    	{
    		*buff_64++ = '=';
    		*buff_64 = '=';
    	}
    }
    
    
    void CSendMail::AddFilePath(char * file_path)	// 加入附件路径
    {
    	if(file_path == NULL)
    	{
    		return;
    	}
    	int i;
    	char *temp;
    	for (int index = 0; index < file_path_list_.size(); index++)
    	{
    		temp = file_path_list_[index];
    		if(strcmp(file_path,temp) == 0)			// 假设已经存在就不用再加入了
    		{
    			return;
    		}
    	}
    	file_path_list_.push_back(file_path);
    }
    
    
    void CSendMail::DeleteFilePath(char* file_path) // 删除附件路径
    {
    	int i;
    	char* temp;
    	for (int index = 0; index < file_path_list_.size(); index++)
    	{
    		temp = file_path_list_[index];
    		if (strcmp(file_path, temp) == 0)
    		{
    			file_path_list_.erase(file_path_list_.begin() + index);
    		}
    	}
    }
    
    
    void CSendMail::DeleteAllPath(void)
    {
    	vector<char *>().swap(file_path_list_);		// 清除容器并最小化它的容量
    }
    
    
    int CSendMail::GetFileData(char* file_path)
    {
    	file_buffer_ = NULL;
    	if(file_path == NULL)
    	{
    		return 0;
    	}
    
    	// 通过读取文件的大小,来开辟数组空间的大小
    	ifstream fin(file_path);
    	if (!fin.is_open())
    	{
    		return -1;
    	}
    	fin.seekg(0, ios::end);
    	int file_length = fin.tellg();
    	fin.seekg(0, ios::beg);
    	file_buffer_ = new char[file_length];
    	fin.read(file_buffer_, file_length);
    	fin.close();
    
    	return file_length;
    }
    
    
    void CSendMail::GetFileName(char* file_name,char* file_path)
    {
    	if(file_path == NULL || file_name == NULL)
    	{
    		return;
    	}
    	for(int index = 0; index < (int)strlen(file_path); index++)
    	{
    		if(file_path[strlen(file_path) - 1 - index] == '\\')
    		{
    			memcpy(file_name, &file_path[strlen(file_path) - index], index);
    			return;
    		}
    	}
    }
    
    
    bool CSendMail::CReateSocket(SOCKET &sock)
    {
    	WORD wVersionRequested;
    	WSADATA wsaData;
    	int err;
    	wVersionRequested = MAKEWORD( 2, 2 );
    	err = WSAStartup(wVersionRequested, &wsaData);
    	if (err != 0) 
    	{
    		return false;
    	}
    	if (LOBYTE(wsaData.wVersion) != 2 ||
    		HIBYTE(wsaData.wVersion) != 2 )
    	{
    		WSACleanup();
    		return false; 
    	}
    	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    	if (sock == INVALID_SOCKET)
    	{
    		return false;
    	}
    
    	sockaddr_in server_addr;
    	memset(&server_addr, 0, sizeof(sockaddr_in));
    	server_addr.sin_family = AF_INET;
    	server_addr.sin_port = htons(25);	// 发邮件一般都是25port,SSL的是465port
    	if(mail_info_.mail_server_name == "")
    	{
    		server_addr.sin_addr.s_addr = inet_addr(mail_info_.mail_server_ip_addr);	// 直接使用IP地址
    	}
    	else
    	{
    		struct hostent *hp = gethostbyname(mail_info_.mail_server_name);	// 使用名称
    		server_addr.sin_addr.s_addr = *(int*)(*hp->h_addr_list);
    		char* ip = inet_ntoa(server_addr.sin_addr);
    		strcpy(mail_info_.mail_server_ip_addr, ip);
    	}
    
    
    	int ret = connect(sock, (sockaddr*)&server_addr, sizeof(server_addr));	// 建立连接
    	if (ret == SOCKET_ERROR)
    	{
    		return false;
    	}
    
    	return true;
    }
    
    
    bool CSendMail::Logon(SOCKET &sock)
    {
    	recv(sock, receive_buff_, 1024, 0);
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "HELO %s\r\n", mail_info_.mail_server_ip_addr);
    	send(sock,send_buff_, strlen(send_buff_), 0);	// 開始会话
    	memset(receive_buff_, 0, sizeof(receive_buff_));
    	recv(sock,receive_buff_, 1024, 0);
    	if(receive_buff_[0] != '2' || receive_buff_[1] != '5' || receive_buff_[2] != '0')
    	{
    		return false;
    	}
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "AUTH LOGIN\r\n");
    	send(sock,send_buff_, strlen(send_buff_),0);	// 请求登录
    	recv(sock,receive_buff_, 1024, 0);
    	if(receive_buff_[0] != '3' || receive_buff_[1] != '3' || receive_buff_[2] != '4')
    	{
    		return false;
    	}
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	Char2Base64(send_buff_, mail_info_.mailbox_user_name, strlen(mail_info_.mailbox_user_name));
    	send_buff_[strlen(send_buff_)] = '\r';
    	send_buff_[strlen(send_buff_)] = '\n';
    	send(sock,send_buff_, strlen(send_buff_), 0);	// 发送username
    	recv(sock,receive_buff_, 1024, 0);
    	if(receive_buff_[0] != '3' || receive_buff_[1] != '3' || receive_buff_[2] != '4')
    	{
    		return false;
    	}
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	Char2Base64(send_buff_, mail_info_.mailbox_user_pwd, strlen(mail_info_.mailbox_user_pwd));
    	send_buff_[strlen(send_buff_)] = '\r';
    	send_buff_[strlen(send_buff_)] = '\n';
    	send(sock, send_buff_, strlen(send_buff_), 0);	// 发送用户password
    	recv(sock, receive_buff_, 1024, 0);
    	if(receive_buff_[0] != '2' || receive_buff_[1] != '3' || receive_buff_[2] != '5')
    	{
    		return false;
    	}
    	return true;	// 登录成功
    }
    
    
    bool CSendMail::SendHead(SOCKET &sock)
    {
    	int rt;
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "MAIL FROM:<%s>\r\n", mail_info_.mailbox_sender);
    	rt = send(sock,send_buff_, strlen(send_buff_), 0);
    
    	if(rt != strlen(send_buff_))
    	{
    		return false;
    	}
    	recv(sock, receive_buff_, 1024, 0);
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "RCPT TO:<%s>\r\n", mail_info_.mailbox_receiver);
    	rt = send(sock,send_buff_, strlen(send_buff_),0);
    	if(rt != strlen(send_buff_))
    	{
    		return false;
    	}
    	recv(sock, receive_buff_, 1024, 0);
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	memcpy(send_buff_, "DATA\r\n", strlen("DATA\r\n"));
    	rt = send(sock, send_buff_, strlen(send_buff_),0);
    	if(rt != strlen(send_buff_))
    	{
    		return false;
    	}
    	recv(sock, receive_buff_, 1024, 0);
    
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "From:\"%s\"<%s>\r\n", mail_info_.mailbox_sender_show_name, mail_info_.mailbox_sender);
    	sprintf_s(&send_buff_[strlen(send_buff_)], 150, "To:\"INVT.COM.CN\"<%s>\r\n", mail_info_.mailbox_receiver);
    	sprintf_s(&send_buff_[strlen(send_buff_)], 150, "Subject:%s\r\nMime-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"INVT\"\r\n\r\n", mail_info_.mail_title);
    	rt = send(sock, send_buff_, strlen(send_buff_), 0);
    	if(rt != strlen(send_buff_))
    	{
    		return false;
    	}
    
    	return true;
    }
    
    
    bool CSendMail::SendTextBody(SOCKET &sock)
    {
    	int rt;
    	memset(send_buff_, 0, sizeof(send_buff_));
    	sprintf_s(send_buff_, "--INVT\r\nContent-Type: text/plain;\r\n  charset=\"gb2312\"\r\n\r\n%s\r\n\r\n", mail_info_.mail_body);
    	rt = send(sock, send_buff_, strlen(send_buff_), 0);
    	if(rt != strlen(send_buff_))
    	{
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
    
    
    bool CSendMail::SendFileBody(SOCKET &sock)
    {
    	char* file_path;
    	int rt;
    	int len;
    	char file_name[128];
    	int pt = 0;
    	int dest_length = 0;
    
    	for(int index = 0; index < file_path_list_.size(); index++)
    	{
    		pt = 0;
    		memset(file_name, 0, 128);
    		file_path = file_path_list_[index];
    		len = GetFileData(file_path);
    		GetFileName(file_name,file_path);
    
    		sprintf_s(send_buff_, "--INVT\r\nContent-Type: application/octet-stream;\r\n  name=\"%s\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;\r\n  filename=\"%s\"\r\n\r\n", file_name, file_name);
    		send(sock,send_buff_, strlen(send_buff_), 0);
    		while (pt < len)
    		{
    			memset(send_buff_,0,sizeof(send_buff_));
    
    			// 760为1024的最大整数,(760/4)*3=570
    			dest_length = 4096;
    			Base64Encode((BYTE*)file_buffer_ + pt, min(len-pt,570), send_buff_, &dest_length);
    			int len1 = strlen(send_buff_);
    
    			pt += min(len-pt, 570);
    			if(pt == len)
    			{
    				send_buff_[len1  ] = '\r';
    				send_buff_[len1+1] = '\n';
    				send_buff_[len1+2] = '\0';
    			}
    			else
    				send_buff_[len1  ] = '\0';
    
    			rt = send(sock,send_buff_, strlen(send_buff_), 0);
    			if(rt != strlen(send_buff_))
    			{
    				return false;
    			}
    		}
    		if(len!=0)
    		{
    			delete[] file_buffer_;
    		}
    	}
    
    	return true;
    }
    
    
    bool CSendMail::SendEnd(SOCKET &sock)
    {
    	sprintf_s(send_buff_, "--INVT--\r\n.\r\n");
    	send(sock,send_buff_, strlen(send_buff_), 0);
    
    	sprintf_s(send_buff_, "QUIT\r\n");
    	send(sock,send_buff_, strlen(send_buff_), 0);
    	closesocket(sock);
    	WSACleanup();
    	return true;
    }
    
    
    bool CSendMail::BeginSendMail(sMailInfo &smail_info)
    {
    	memcpy(&mail_info_, &smail_info, sizeof(smail_info));
    	if(mail_info_.mail_body == NULL
    	|| mail_info_.mail_server_ip_addr == NULL
    	|| mail_info_.mail_server_name == NULL
    	|| mail_info_.mailbox_receiver == NULL
    	|| mail_info_.mailbox_sender == NULL
    	|| mail_info_.mailbox_sender_show_name == NULL
    	|| mail_info_.mail_title == NULL
    	|| mail_info_.mailbox_user_name == NULL
    	|| mail_info_.mailbox_user_pwd == NULL)
    	{
    		return false;
    	}
    
    	SOCKET sock;
    	if(!CReateSocket(sock)) // 建立连接
    	{
    		return false;
    	}
    
    	if(!Logon(sock))		// 登录邮箱
    	{
    		return false;
    	}
    
    	if(!SendHead(sock))		// 发送邮件头
    	{
    		return false;
    	}
    
    	if(!SendTextBody(sock)) // 发送邮件文本部分
    	{
    		return false;
    	}
    
    	if(!SendFileBody(sock)) // 发送附件
    	{
    		return false;
    	}
    
    	if(!SendEnd(sock))		// 结束邮件,并关闭sock
    	{
    		return false;
    	}
    
    	return true;
    }


    2、測试使用以及效果

    申请了一个測试邮箱(任意申请的)

    账号是:qq2590995733@163.com
    password是:123456789z

    那么给自己发送邮箱(含有附件的測试project例如以下)

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "iostream"
    using namespace std;
    
    #include "SendMail.h"
    
    
    void TestSendMail()
    {
    	for (int index = 0; index < 10; index++)
    	{
    		CSendMail mail;
    		sMailInfo info;
    
    	//	memcpy(info.m_pcIPAddr, "123.125.50.138", strlen("123.125.50.138"));
    		info.mail_server_name = "smtp.163.com";
    		info.mailbox_receiver = "qq2590995733@163.com";
    		info.mailbox_sender = "qq2590995733@163.com";
    		info.mailbox_user_name = "qq2590995733";
    		info.mailbox_user_pwd = "123456789z";
    
    		info.mailbox_sender_show_name = "taobao客服";
    		info.mail_title = "游戏激活key";
    		info.mail_body = "XX,你妈妈喊你回家吃饭了!!

    "; mail.AddFilePath("c:\\Download History.log"); mail.AddFilePath("c:\\1.jpg"); mail.AddFilePath("c:\\3.log"); mail.BeginSendMail(info); } } int _tmain(int argc, _TCHAR* argv[]) { TestSendMail(); return 0; }


    效果例如以下:




    3、补充

    代码是參考csdn一个project的,原来是依赖于mfc的,给修正了一下,只是还是须要增加atl(做base64的编码)。还得多多感谢原作者!


    事实上这里还是存在有问题的,比方发送出去的附件,在下载的时候,是有那么一点点被改变了。



    只是这里主要是想要表达怎样发送邮件,所以。。应该会在后面进行修复吧。


    高速下载測试projectcsdn(vs2012):

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

    展开全文
  • 怎样发送匿名邮件

    万次阅读 热门讨论 2018-02-22 11:30:30
    (1)网页登录:24小时临时邮箱(2)会获取一个临时邮箱,不需要注册就可以使用(3)点击匿名邮件发送(4)收件箱填写你想要发送人的邮箱地址,只有显示发送成功邮箱才会收到邮件(5)发件人会随机...
  • 在搭建私人邮件服务器之后,本人的邮件服务器并没有发挥实质的作用,所以,本着独乐乐不如众乐乐的原则,我把它扩展成一个共享邮箱,匿名邮箱临时邮箱,免费收信的邮箱: 网址:STEP免费邮箱 ...
  • 使用nodejs发送电子邮件

    千次阅读 2019-01-15 13:18:44
    而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐藏于前期,而不至于临时临急去做善后方案。 对于多人协合(不管是不是异地)场合,...
  •  •421 HL:REP 该IP发送行为异常,存在接收者大量不存在情况,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并核对发送列表有效性;  •421 HL:ICC 该IP同时并发连接数过大,超过了网易的限制,被临时...
  • mail、sendEmail发送邮件命令

    千次阅读 2020-03-03 17:56:51
    申请临时邮箱地址 https://blog.csdn.net/u012206617/article/details/104632026 Centos centos自带mail工具 安装mail yum -y install mailx 配置发送人帐号信息 vim /etc/mail.rc 在最后加两行代码 set ...
  • C#定时发送邮箱设置

    2017-06-26 21:19:00
    今天临时维护了前同事做的定时发送邮件Demo。 原来是使用网易163邮箱定时发送,但是会出现邮箱收不到邮件的情况。 今天把它改成了qq邮箱,发现qq邮箱比较稳定,基本没有漏掉的邮件。 但是在改的过程中,出现...
  • 使用方法: ... 第二步,在 config文件里新增 如下配置,或者干脆在action里用C函数设置临时配置亦可. ...SendMail('350680013@qq.com','我能用phpmailer发送邮件了','谢谢您。。。',C('MAIL_SENDER')); PS:欢迎下载使用
  • 0x01,环境介绍:我们用的是微软的邮箱打算用SMTP方式发送邮件。先登录账户看官方给出SMTP信息。0x02,系统mailx(mail)设置。通过命令可以看到,mail实际上是mailx的快捷方式。然后在/etc/mail.rc里...
  • 而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐患于前期,而不至于临时临急去做善后方案。 对于多人协合(不管是不是异地)场合,...
  • 在空闲时间给大家分享一下python脚本发邮件,163邮箱,QQ邮箱,本代码以163邮箱为例 先把脚本代码给大家,请先浏览代码下方的设置 import smtplib # 登陆邮件服务器,进行邮件发送 from email.mime.text import...
  • 1.swaks工具使用 2.什么是邮件的SPF配置 3.SPF漏洞简析 4.SPF漏洞修复方案 壹 swaks工具的使用 ...要测试的邮箱> 用来测试邮箱的连通性 ...我们先申请一个临时邮箱:http://24mail.chacuo.net/enus ...
  • SpringBoot 集成 E-mail发送邮件 JDK本身有自带发送邮件api,加上SpringBoot在进行封装,使得现在使用起来十分快速简洁。 话不多说,参考纯洁的微笑博客,更改jar版本为2.0.4 开干,基本没什么坑。 就是配置邮箱账号...
  • 企业邮箱网页端默认采用Unicode(UTF-8)编码发送邮件,如果收件人邮箱的网页端不支持Unicode(UTF-8)编码,就会出现乱码问题。 解决方案 临时解决方法: 网页端 在收件箱中选择目标邮件,右键单击邮件内容,单击...
  • 出现这样问题的根本原因是因为...1.安装发送邮件的mailx 以及windows文件转unix文件的命令 dos2unix yum -y install mailx dos2unix //安装mailx工具和dos2unix转换工具 2.创建一个临时中转文件 touch /tmp...
  • IMAP是什么? IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。...④ 发送短信验证——获取
  • 两者之间也有一些中间立场,例如检查顶级域是否具有有效的MX记录以及检测临时电子邮件地址。一种确定的方法是向该地址发送电子邮件,并让用户单击链接进行确认。但是在发送文章之前我们需要对用户的邮箱进行预定义...
  • 最近经常需要出一些临时性的报表,于是就用python 的 smtplib 和 email 两模块写了个小程序,当数据处理完后通过邮箱把报表文件从服务器上发送出来! 代码如下,本人亲测通过。 #!/usr/bin/env python # -*- ...
  • 对于用户临时查看一下邮件,他们就不需要将邮件下载到本机查看。这个时候我们可以为用户搭建一个Webmail吧。基于我们已经完成的邮件服务器,我们只需要给用户提供一个基于浏览器访问的mail工具就可以了。...
  • 发送邮件成功就不再发短信了; 使用后出现的问题: 1、平台所有相关管理员都收到邮件 或 短信;客户需要让某些账号不收到审核提醒; 临时方案1:修改这些其他管理员账号信息中电话号码:、邮箱为其中一个人的; 结果...
  • outlook/qq邮箱邮件伪造绕过SPF

    万次阅读 2020-08-13 11:53:21
    通过更改发送邮件时候的发送人的昵称也就是from头信息来达到邮件伪造的目的。由于我们还是使用的真实的邮箱,所以自然而然的就绕过来SPF。 所谓的真实邮箱就是例如qq邮箱,163邮箱这种。 而非真实邮箱就是所谓的...
  • 邮箱变网络硬盘易语言源码系统结构:发送邮件初始化子程序,发送邮件子程序,发送邮件线程,回调函数, ======模块程序集 || ||------_启动子程序 || ||------_临时子程序 || ||------发送邮件初始
  • 邮箱按照属性可分为几种类型,个人免费邮箱、VIP邮箱、企业邮箱,不同的邮箱有不同的特点,个人邮箱适合临时使用,VIP邮箱适合个人及公司领导作为对外正式邮箱使用,企业邮箱则适合企业给员工作为业务往来邮箱使用 ...
  • 易语言辰辰发邮件模块源码系统结构:搜狐邮箱登录,搜狐发送邮件,URL_utf8网址编码,GBK编码到指定编码,POST,加载,卸载, ======辰辰发邮件 || ||------_启动子程序 || ||------_临时子程序 || ||----
  • SMTP 服务器把邮件临时存放在邮件缓存队列中,等待发送发送邮件服务器的 SMTP 客户与接收方邮件服务器的 SMTP服务器建立 TCP 连接,然后就把邮件缓存队列中的邮件依次发送出去。 运行在接收方邮件服务器中的...
  • 1. 读取excel 模板邮箱发送邮件 2. 薪资项是生成的附件htm文件 3. 发送成功和失败记录有日志记载 预览: 核心代码: //发件人地址 MailAddress from = new MailAddress(fromEmail, fromEmail); //收件...

空空如也

空空如也

1 2 3 4
收藏数 76
精华内容 30
关键字:

临时发送邮件邮箱