java发送邮件,正文内容无格式,如何解决?
收到的邮件
发送格式
邮件代码
public void sendEmail(@RequestBody SysMail sysMail) throws Exception {
checkSysEmail(sysMail);
Object content = sysMail.getContent();
String mailTitle = sysMail.getMailTitle();
String receiveAddress = sysMail.getReceiveAddress();
String sendAddress = sysMail.getSendAddress();
String sendPassword = sysMail.getSendPassword();
String username = getUsername();
List<String> receiveAddressList= Arrays.asList(receiveAddress.split(","));
//创建连接邮件服务器的参数配置
Properties props = new Properties();// 参数配置
props.setProperty("mail.smtp.host", SMTPEmail);// 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true");// 需要请求认证
props.setProperty("mail.transport.protocol", "smtp");
//根据配置创建会话对象和邮件服务器交互
Session session = Session.getInstance(props);
session.setDebug(true);// 设置为debug模式, 可以查看详细的发送日志
//创建邮件
List<MimeMessage> messages = createEmail(username, content, mailTitle, session, sendAddress, receiveAddressList);
//使用Session获取邮件传输对象
Transport transport = session.getTransport();
//使用邮箱账号和密码连接邮件服务器
transport.connect(sendAddress, sendPassword);
//发送邮件
for (MimeMessage message : messages){
transport.sendMessage(message, message.getAllRecipients());
}
//记录已发数据
List<SysMailRecord> sysMailRecordList = new ArrayList<>();
for (String ra : receiveAddressList){
SysMailRecord sysMailRecord = new SysMailRecord();
sysMailRecord.setMailTitle(mailTitle);
sysMailRecord.setReceiveAddress(ra);
sysMailRecord.setSendAddress(sendAddress);
sysMailRecord.setSendTime(new Date());
sysMailRecordList.add(sysMailRecord);
}
mailService.insertMailRecord(sysMailRecordList);
//关闭连接
transport.close();
}
/**
* 创建邮件
*/
private static List<MimeMessage> createEmail(String username, Object content, String mailTitle, Session session, String sendMail, List<String> receiveMail) throws Exception {
List<MimeMessage> mimeMessagesList = new ArrayList<>();
for (String s : receiveMail) {
//创建一封邮件
MimeMessage emailMessage = new MimeMessage(session);
//发件人
emailMessage.setFrom(new InternetAddress(sendMail, username, "UTF-8"));
//收件人
//emailMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
emailMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(s, "", "UTF-8"));
//邮件主题
emailMessage.setSubject(mailTitle, "UTF-8");
emailMessage.setContent(content, "text/html;charset=UTF-8");
System.out.println(content);
//设置发件时间
emailMessage.setSentDate(new Date());
//保存设置
emailMessage.saveChanges();
mimeMessagesList.add(emailMessage);
}
return mimeMessagesList;
}
前端代码
<template>
<div class="app-container">
<el-row :gutter="15">
<el-form ref="form" :model="formData" :rules="rules" size="medium" label-width="100px" >
<el-form-item label="发件人邮箱" prop="sendAddress">
<el-input v-model="formData.sendAddress" placeholder="请输入发件人邮箱" :style="{width: '25%'}"></el-input>
</el-form-item>
<el-form-item label="收件人邮箱" prop="receiveAddress">
<el-input v-model="formData.receiveAddress" placeholder="请输入收件人邮箱" autocomplete="off" clearable :style="{width: '25%'}">
</el-input>
</el-form-item>
<el-form-item label="邮箱密码" prop="sendPassword">
<el-input v-model="formData.sendPassword" placeholder="请输入邮箱密码" autocomplete="off" clearable show-password
:style="{width: '25%'}"></el-input>
</el-form-item>
<el-form-item label="邮件主题" prop="mailTitle">
<el-input v-model="formData.mailTitle" placeholder="请输入邮件主题" clearable :style="{width: '25%'}">
</el-input>
</el-form-item>
<el-form-item label="附件">
<input type="file" id="file" hidden @change="fileChange" >
<el-input placeholder="请输入内容" v-model="formData.imgSavePath" :style="{width: '25%'}" class="input-with-select">
<el-button slot="append" icon="el-icon-folder" type="success" @click="btnChange"></el-button>
</el-input>
</el-form-item>
<el-form-item prop="content" :style="{width: '75%'}">
<quill-editor class="editor"
ref="myTextEditor"
v-model="formData.content"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@ready="onEditorReady($event)"
@change="onEditorChange($event)">
</quill-editor>
</el-form-item>
</el-form>
</el-row>
<el-col :span="24" align="right">
<el-button type="primary" @click="handleSend" v-hasPermi="['mail:info:send']">发 送</el-button>
</el-col>
</div>
</template>
<script>
import {sendCustomerEmail} from "../../../api/mail/mail";
export default {
data () {
return {
formData:{
//imgSavePath: '',
sendAddress:'',
receiveAddress: '',
sendPassword:'',
mailTitle:'',
content:''
},
input: '',
content: null,
rules: {
sendAddress: [{
required: true,
message: '请输入发件人邮箱',
trigger: 'blur'
}],
receiveAddress: [{
required: true,
message: '请输入收件人邮箱',
trigger: 'blur'
}],
sendPassword: [{
required: true,
message: '请输入邮箱密码',
trigger: 'blur'
}],
mailTitle: [{
required: true,
message: '请输入邮件主题',
trigger: 'blur'
}],
content: [{
required: true,
message: '',
trigger: 'blur'
}],
},
editorOption: {
modules: {
toolbar: [
["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
["blockquote", "code-block"], // 引用 代码块
[{ header: 1 }, { header: 2 }], // 1、2 级标题
[{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
[{ script: "sub" }, { script: "super" }], // 上标/下标
[{ indent: "-1" }, { indent: "+1" }], // 缩进
// [{'direction': 'rtl'}], // 文本方向
[{ size: ["small", false, "large", "huge"] }], // 字体大小
[{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
[{ font: [] }], // 字体种类
[{ align: [] }], // 对齐方式
["clean"], // 清除文本格式
["link", "image", "video"] // 链接、图片、视频
], //工具菜单栏配置
},
placeholder: '请在这里添加邮件内容', //提示
readyOnly: false, //是否只读
theme: 'snow', //主题 snow/bubble
syntax: true, //语法检测
}
}
},
methods: {
fileChange(e) {
try {
const fu = document.getElementById('file');
if (fu == null) return;
this.form.imgSavePath = fu.files[0].path;
console.log(fu.files[0].path)
} catch (error) {
console.debug('choice file err:', error)
}
},
btnChange() {
var file = document.getElementById('file');
file.click()
},
// 表单重置
reset() {
this.formData = {
sendAddress:undefined,
receiveAddress:undefined,
sendPassword:undefined,
mailTitle:undefined,
content:undefined
};
this.resetForm("form");
},
// 失去焦点
onEditorBlur(editor) {},
// 获得焦点
onEditorFocus(editor) {},
// 开始
onEditorReady(editor) {},
// 值发生变化
onEditorChange(editor) {
this.content = editor.html;
console.log(editor);
},
handleSend(){
console.log(this.formData);
sendCustomerEmail(this.formData).then(res =>{
this.$modal.msgSuccess("发送成功");
})
}
},
computed: {
editor() {
return this.$refs.myTextEditor.quillEditor;
}
},
mounted() {
console.log("11",this.$route.query.getEmial);
const receiveAddress=this.$route.query.getEmial.join(',');
this.$set(this.formData,"receiveAddress",receiveAddress)
// console.log('this is my editor',this.editor);
}
}
</script>
邮件是支持html标签的,你前端传过来的时候并不是html标签格式的把