如何发送HTML格式的E-mail
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何发送HTML格式的E-mail相关的知识,希望对你有一定的参考价值。
如何发送html格式的E-mail,我常收到一些别人发来的一些E-mail,打开后都是以网页的方式显示的,我想发送一个这样的E-mail给我的朋友,怎么试也不行,我试过用Outlook Express来发,但发过去每一个图片都一个副件(别人发给我的就没有,不知道为什么?)我也试过把我做的那一个页面(网页)传到Web上面去,在把网页复制到E-mail里面去发送,但发送过去后图片显示不出来,如果在显示不出来的电脑上面开一下我上传的那个网页图片就显示出了?为什么啊?复制源代码在E-mail,里面选择以HTML格式发送也不行.
谁能告诉我? 谢谢
我用的就是163的E-mail,转发别人的可以,复制粘贴自己的就不行了.
<br>发送给别人,别人看不到图片,图片显示不出来.文字可以看到.
怎么没人知道啊?????????????????
Visual Basic 6中发送邮件的新方法
用VB6编写发送邮件的程序,有多种E-mail组件可供选择,如MAPIMessages、IIS4.0附带的CDONTS(NTS Collaboration Data Objects)以及许多第三方厂商开发的Email软件等。本文介绍用CDONTS开发VB下的邮件程序方法。
1. 确认已安装SMTP服务器
首先,必须确认在IIS服务器上已安装SMTP服务器,这是安装Option Pack时被缺省安装的选项。如果SMTP服务器已安装,在System32目录下会存在一个名为cdonts.dll的文件。
2. 最简单的邮件发送程序
以下是一个最简单的邮件发送程序,它由me@hotmail.net向abc@263.net发出一封标题为“Title”、内容为“Hello”的E-mail:
Private Sub cmdSendMail_Click()
Dim objMail as Object
Set objMail=CreateObject("CDFONTS.DLL")
ObjMail.Send "me@hotmail.net ", "abc@263.net","Title","Hello"
Set objMail=nothing
End Sub
3. 发送邮件附件
如果有附加的文件需要随同邮件传送,可以使用CDONTS的AttachFile方法:
Private Sub cmdSendMail_Click()
Dim objMail as Object
Set objMail=CreateObject("CDFONTS.DLL")
With ObjMail
.From= "me@hotmail.net "
.To= "abc@263.net"
.Subject="Title"
.Body="Hello"
.AttachFile "c:\document\ sample.doc","sample.doc"
.Send
End With
Set objMail=nothing
End Sub
4. CDONTS组件常用属性和方法
CDONTS组件常用的属性和方法列举如下:
属性:
Version:返回CDONTS组件的版本号
MailFormat:邮件格式,1-普通文本类型;0-MIME类型
Cc:设置一个或多个参阅的邮件地址
From:邮件发送者的地址
To :邮件接受者的地址
Subject:标题
Body:内容
BodyFormat:内容格式,1-普通文本;0-超文本
方法:
AttachFile:附加一个文件
AttachURL:附加一个地址
Send:发送邮件
5. 发送超文本格式的E-mail
你一定见到过许多使用超文本格式的E-mail,其中不但可以有图片、声音,甚至还可以嵌入动画。如果给你的朋友也发送一封这样的邮件,一定会带给他(她)意外的惊喜,因为这用一般的邮件发送程序是无能为力的。以下使用CDONTS组件发送一个HTML格式的邮件,其中包含有一幅名为sample.gif的图片,程序如下:
Private Sub cmdSendMail_Click()
Dim objMail as Object
Set objMail=CreateObject("CDFONTS.DLL")
Dim strHTML as String
StrHTML=""
StrHTML= StrHTML+""
StrHTML = StrHTML +"
用CDONTS发送Email的例子"
StrHTML= StrHTML+"
"
StrHTML= StrHTML+"
以上例子嵌入了图片sample.gif
"
StrHTML= StrHTML+""
With ObjMail
.From= "me@hotmail.net "
.To= "abc@263.net"
.Subject="Title"
.Body=strHTML
.AttachURL "c:\mydata\sample.gif","sample.gif"
.BodyFormat=0
.EmailFormat=0
.Send
End With
Set objMail=nothing
End Sub
到这里,相信大家一定发现SMTP邮件处理的一个缺陷了。SMTP服务器接收你的输出消息,但并不做发送者名字和地址的验证,这本是由SMTP的异步发送机制所决定的,但有人可能别有用心地用它来假扮别人发送邮件!本文强烈建议各位切勿轻易试用,一旦让ISP知道你的行径,你的帐号极可能会被立即删除。
参考资料:http://topic.csdn.net/t/20020903/08/991274.html
参考技术A 问:我经常订阅一些电子刊物,我发现这些电子刊物基本上是HTML格式的。请问HTML格式电子邮件,应如何制作及发送?答:其实一般的HTML格式电子邮件,都可以使用内建有HTML编辑器的电子邮件程序(如:Outlook Express)编写发送。我们以Outlook Express 5.0(简称OE 5.0)为例,点击工具栏上的“新邮件”按钮,会弹出一个邮件编辑窗口。再点击“格式→多信息文本(HTML)”就
可以用内建的HTML编辑器来编写HTML格式的电子邮件了。一般我们是通过点击“查看→编辑源文件”,就会在该窗口下方出现“编辑”、“源文件”、“预览”三个选项卡来编辑源文件。如果你认为这种方法太麻烦了(或者你根本不懂如何编辑源文件),还有一个方法就是用FrontPage 2000制作出HTML文件后,然后点击“文件→发送”,将HTML文件以附件的形式发送给对方。 参考技术B 现在网络安全比较严重,一般不允许在普通内容里面嵌入网页代码,防止css跨站攻击。
所以你发的内容里面如果有网页代码,会被服务器转化为普通的内容。
如果你要实现各种界面效果,可以采用flash。 参考技术C 发送EMAIL的时候有个HTML代码选项,选择后就可以。 参考技术D 可以先压缩,添加到附件中即可,我试过的
Java发送邮件
01-准备jar包
使用Java应用程序发送 E-mail 十分简单, 前提先是下载以下两个jar包
- javax.mail
- javax.activation
下载地址:https://pan.baidu.com/s/1Wwm6qD0dbkC2Rl0PoY8RIg
提取码:zcfs
下载并解压缩这些文件,在新创建的顶层目录中,您会发现这两个应用程序的一些 jar 文件。您需要把 mail.jar 和 activation.jar 文件添加到您的 CLASSPATH 中。
如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。
02-发送简单的E-mail
下面是一个发送简单E-mail的例子。假设你的本地主机已经连接到网络。
// 文件名 SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail
{
public static void main(String [] args)
{
// 收件人电子邮箱
String to = "abcd@gmail.com";
// 发件人电子邮箱
String from = "web@gmail.com";
// 指定发送邮件的主机为 localhost
String host = "localhost";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties);
try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject("This is the Subject Line!");
// 设置消息体
message.setText("This is actual message");
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
编译并运行这个程序来发送一封简单的E-mail:
$ java SendEmail
Sent message successfully....
如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
下面是对于参数的描述:
- type:要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:Message.RecipientType.TO
- addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。
03-发送HTML内容的E-mail
下面是一个发送 HTML E-mail 的例子。假设你的本地主机已经连接到网络。
和上一个例子很相似,除了我们要使用 setContent() 方法来通过第二个参数为 "text/html;charset=utf-8",来设置内容来指定要发送HTML 内容。
// 文件名 SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail
{
public static void main(String [] args)
{
// 收件人电子邮箱
String to = "abcd@gmail.com";
// 发件人电子邮箱
String from = "web@gmail.com";
// 指定发送邮件的主机为 localhost
String host = "localhost";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认的 Session 对象。
Session session = Session.getDefaultInstance(properties);
try{
// 创建默认的 MimeMessage 对象。
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头字段
message.setSubject("This is the Subject Line!");
// 发送 HTML 消息, 可以插入html标签
message.setContent("<h1>This is actual message</h1>",
"text/html;charset=utf-8" );
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
编译并运行此程序来发送HTML e-mail:
$ java SendHTMLEmail
Sent message successfully...
04-发送带有附件的 E-mail
下面是一个发送带有附件的 E-mail的例子。假设你的本地主机已经连接到网络。
// 文件名 SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail
{
public static void main(String [] args)
{
// 收件人电子邮箱
String to = "abcd@gmail.com";
// 发件人电子邮箱
String from = "web@gmail.com";
// 指定发送邮件的主机为 localhost
String host = "localhost";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认的 Session 对象。
Session session = Session.getDefaultInstance(properties);
try{
// 创建默认的 MimeMessage 对象。
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头字段
message.setSubject("This is the Subject Line!");
// 创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
// 消息
messageBodyPart.setText("This is message body");
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 设置文本消息部分
multipart.addBodyPart(messageBodyPart);
// 附件部分
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// 发送完整消息
message.setContent(multipart );
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
编译并运行你的程序来发送一封带有附件的邮件。
$ java SendFileEmail
Sent message successfully....
05-用户认证部分
如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:
props.put("mail.smtp.auth", "true");
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
e-mail其他的发送机制和上述保持一致。
需要用户名密码验证邮件发送实例:
本实例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:
Java 代码如下:
// 需要用户名密码邮件发送实例
//文件名 SendEmail2.java
//本实例以QQ邮箱为例,你需要在qq后台设置
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail2
{
public static void main(String [] args)
{
// 收件人电子邮箱
String to = "xxx@qq.com";
// 发件人电子邮箱
String from = "xxx@qq.com";
// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com"; //QQ 邮件服务器
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("xxx@qq.com", "qq邮箱授权码"); //发件人邮件用户名、授权码
}
});
try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject("This is the Subject Line!");
// 设置消息体
message.setText("This is actual message");
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....from runoob.com");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
06-简单封装
配置文件代码
# 文件名:
#发件人的邮箱主机
host=smtp.qq.com
#发件人的邮箱
user=xxxxxx@qq.com
#发件人的邮箱密码(邮箱授权码)
password=xxxxxxxx
封装文件程序代码
package cn.lpl666;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class MailUtils {
// 发件人的邮箱主机
private static String host = null;
// 发件人的邮箱
private static String from = null;
// 发件人的邮箱密码(授权码)
private static String pwd = null;
// 收件人的邮箱
private static String to = null;
// 获取默认session对象
private static Session session = null;
/**
* 设置基本信息
*/
static {
// 读取本地配置文件
InputStream resourceAsStream = MailUtils.class.getClassLoader().getResourceAsStream("mail.properties");
// 加载到集合中
Properties pro = new Properties();
try {
pro.load(resourceAsStream);
host = pro.getProperty("host");
from = pro.getProperty("user");
pwd = pro.getProperty("password");
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, pwd); //发件人邮件用户名、授权码
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发送普通文本
* @param to 收件人邮箱
* @param title 邮件标题
* @param content 邮件内容
*/
public static void sendText(String to,String title,String content){
sendText(to,title,content,false);
}
/**
* 发送可包含HTML
* @param to 收件人邮箱
* @param title 邮件标题
* @param content 邮件内容
* @param isHTML 是否包含HTML
*/
public static void sendText(String to,String title,String content,boolean isHTML){
try {
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject(title);
if(isHTML){
// 设置消息体-HTML
message.setContent(content,"text/html;charset=utf-8");
}else {
// 设置消息体-普通文本
message.setText(content);
}
// 发送消息
Transport.send(message);
// System.out.println("Sent message successfully....");
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试文件代码
package cn.lpl666;
public class TestMail {
public static void main(String[] args) {
MailUtils.sendText("xxxxx@qq.com","测试标题","<h1>测试内容</h1>",true);
System.out.println("发送成功");
}
}
以上是关于如何发送HTML格式的E-mail的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 gmail-api for python 发送 HTML 格式的电子邮件
高手请帮忙:如何使用nmsmtp控件发送带附件的HTML格式信件
如何使用 Outlook 2010(无 smtp)和 python 发送带有嵌入图像(不是附件)的 HTML 格式电子邮件