使用Commom-email发送电子邮件

本文介绍了一个Java类,用于简化电子邮件的发送过程。该类支持发送简单、多部分及HTML格式的邮件,并允许添加附件。文章还提供了使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;


public class DMail {

 /**
  * 发送简单的email,不能添加附件
  */
 public static final int SIMPLEEMAIL = 1;
 /**
  * 文本邮件,可以添加多个附件
  */
 public static final int MULTIPARTEMAIL = 2;
 /**
  * HTML格式邮件,同时具有MultiPartEmail类所有“功能”
  */
 public static final int HTMLEMAIL = 3;
 
 /**
  * 发件人的地址
  */
 private String from_address = "";
 /**
  * 邮件标题
  */
 private String title = "";
 /**
  * 邮件内容
  */
 private String text = "";
 /**
  * 发送邮件服务器的信息
  */
 private String mail_smtp_host = "";
 /**
  * 发件人用户名
  */
 private String username = "";
 /**
  * 发件人密码
  */
 private String passwod = "";
 /**
  * mail发送方式
  */
 private int mail_type = 1;
 /**
  * 邮件附件列表
  */
 private ArrayList accessoriesList = new ArrayList();
 /**
  * 发送地址列表
  */
 private ArrayList to_addressList = new ArrayList();
 /**
  * 抄送地址列表
  */
 private ArrayList cc_to_addressList = new ArrayList();
 /**
  * 密送地址列表
  */
 private ArrayList bcc_to_addressList = new ArrayList();
 
 /**
  * 获取发件人的地址
  * @return
  */
 private String getFrom_address() {
  return from_address;
 }
 /**
  * 设置发件人的地址
  * @param from_address
  */
 public void setFrom_address(String from_address) {
  this.from_address = from_address;
 }
 /**
  * 获取smtp host主机地址
  * @return
  */
 private String getMail_smtp_host() {
  return mail_smtp_host;
 }
 /**
  * 设置smtp host主机地址
  * @param mail_smtp_host
  */
 public void setMail_smtp_host(String mail_smtp_host) {
  this.mail_smtp_host = mail_smtp_host;
 }
 /**
  * 获取发件人密码
  * @return
  */
 private String getPasswod() {
  return passwod;
 }
 /**
  * 设置发件人密码
  * @param passwod
  */
 public void setPasswod(String passwod) {
  this.passwod = passwod;
 }
 /**
  * 获取邮件内容
  * @return
  */
 private String getText() {
  return text;
 }
 /**
  * 设置邮件内容(支持HTML)
  * @param text
  */
 public void setText(String text) {
  this.text = text;
 }
 /**
  * 获取邮件标题
  * @return
  */
 private String getTitle() {
  return title;
 }
 /**
  * 设置邮件标题(主题)
  * @param title
  */
 public void setTitle(String title) {
  this.title = title;
 }
 /**
  * 获取发件人用户名
  * @return
  */
 private String getUsername() {
  return username;
 }
 /**
  * 设置发件人用户名
  * @param username
  */
 public void setUsername(String username) {
  this.username = username;
 }
 /**
  * 添加附件
  * @param path
  */
 public void AddAccessories(String path){
  EmailAttachment attachment = new EmailAttachment();
  attachment.setPath(path);
  attachment.setDisposition(EmailAttachment.ATTACHMENT);
  //文件描述
  attachment.setDescription("venustech");
  try {
   attachment.setName(MimeUtility.encodeText(path.substring(path.lastIndexOf("/")+1)));//解决中文字符问题
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  this.accessoriesList.add(attachment);
 }
 
 /**
  * 添加发送地址
  * @param path
  */
 public void Add_To_addressList(String path){
  String[] p = path.split(";");
  for(int i = 0 ; i < p.length;i++){
   if(p[i].equals("")){
    continue;
   }
   to_addressList.add(p[i]);
  }
 }
 /**
  * 添加抄送地址
  * @param path
  */
 public void Add_Cc_To_addressList(String path){
  String[] p = path.split(";");
  for(int i = 0 ; i < p.length;i++){
   if(p[i].equals("")){
    continue;
   }
   cc_to_addressList.add(p[i]);
  }
 }
 /**
  * 添加密送地址
  * @param path
  */
 public void Add_Bcc_To_addressList(String path){
  String[] p = path.split(";");
  for(int i = 0 ; i < p.length;i++){
   if(p[i].equals("")){
    continue;
   }
   bcc_to_addressList.add(p[i]);
  }
 }
 
 /**
  * 发送HTML格式邮件,可以添加多个附件
  * @return
  */
 private boolean sendHtmlEMail(){
  
  try {
   HtmlEmail email = new HtmlEmail();
   //smtp host
   email.setHostName(getMail_smtp_host());
   email.setCharset("UTF-8");
   //登陆邮件服务器的用户名和密码
   email.setAuthentication(getUsername(),getPasswod());
   //接收人
   //email.addTo(getTo_address(),getFrom_nickname());
   for(int i = 0 ; i < to_addressList.size();i++){
    email.addTo(((String)to_addressList.get(i)),((String)to_addressList.get(i)));
   }
   //抄送
   for(int i = 0 ; i < cc_to_addressList.size();i++){
    email.addCc(((String)cc_to_addressList.get(i)),((String)cc_to_addressList.get(i)));
   }
   //密送
   for(int i = 0 ; i < bcc_to_addressList.size();i++){
    email.addBcc(((String)bcc_to_addressList.get(i)),((String)bcc_to_addressList.get(i)));
   }
   //发送人
   email.setFrom(getFrom_address(),getFrom_address());
   //标题
   email.setSubject(getTitle());
   //邮件内容
   email.setHtmlMsg(getText());
   //添加附件(附件,可以定义多个附件对象)
   for(int i = 0; i < this.accessoriesList.size();i++){
    EmailAttachment attachment = (EmailAttachment)this.accessoriesList.get(i);
    email.attach(attachment);
   }
   //发送
   email.send();
  } catch (EmailException e) {
   return false;
  }
  return true;
 }
 /**
  * 发送文本邮件,可以添加多个附件
  * @return
  */
 private boolean sendMultipartEMail(){
  
  try {
   MultiPartEmail email = new MultiPartEmail();
   //smtp host
   email.setHostName(getMail_smtp_host());
   email.setCharset("UTF-8");
   //登陆邮件服务器的用户名和密码
   email.setAuthentication(getUsername(),getPasswod());
   //接收人
   //email.addTo(getTo_address(),getFrom_nickname());
   for(int i = 0 ; i < to_addressList.size();i++){
    email.addTo(((String)to_addressList.get(i)),((String)to_addressList.get(i)));
   }
   //抄送
   for(int i = 0 ; i < cc_to_addressList.size();i++){
    email.addCc(((String)cc_to_addressList.get(i)),((String)cc_to_addressList.get(i)));
   }
   //密送
   for(int i = 0 ; i < bcc_to_addressList.size();i++){
    email.addBcc(((String)bcc_to_addressList.get(i)),((String)bcc_to_addressList.get(i)));
   }
   //发送人
   email.setFrom(getFrom_address(),getFrom_address());
   //标题
   email.setSubject(getTitle());
   //邮件内容
   email.setMsg(getText());
   //添加附件(附件,可以定义多个附件对象)
   for(int i = 0; i < this.accessoriesList.size();i++){
    EmailAttachment attachment = (EmailAttachment)this.accessoriesList.get(i);
    email.attach(attachment);
   }
   //发送
   email.send();
  } catch (EmailException e) {
   return false;
  }
  return true;
 }
 
 
 /**
  * 发送简单邮件
  * @return
  */
 private boolean sendSimpleEMail(){
  SimpleEmail email = new SimpleEmail();
  //smtp host
  email.setHostName(getMail_smtp_host());
  email.setCharset("UTF-8");
  //登陆邮件服务器的用户名和密码
  try {
   email.setAuthentication(getUsername(),getPasswod());
   //接收人
   //email.addTo(getTo_address(),getFrom_nickname());
   for(int i = 0 ; i < to_addressList.size();i++){
    email.addTo(((String)to_addressList.get(i)),((String)to_addressList.get(i)));
   }
   //抄送
   for(int i = 0 ; i < cc_to_addressList.size();i++){
    email.addCc(((String)cc_to_addressList.get(i)),((String)cc_to_addressList.get(i)));
   }
   //密送
   for(int i = 0 ; i < bcc_to_addressList.size();i++){
    email.addBcc(((String)bcc_to_addressList.get(i)),((String)bcc_to_addressList.get(i)));
   }
   //发送人
   email.setFrom(getFrom_address(),getFrom_address());
   //标题
   email.setSubject(getTitle());
   //邮件内容
   email.setMsg(getText());
   //发送
   email.send();
  } catch (EmailException e) {
   e.printStackTrace();
   return false;
  }
  return true;
 }
 
 /**
  * 发送邮件
  * @return
  */
 public boolean sendEMail(){
  
  boolean result = false;
  if(this.getMail_type() == this.SIMPLEEMAIL){
   result = sendSimpleEMail();
  }else if(this.getMail_type() == this.MULTIPARTEMAIL){
   result = sendMultipartEMail();
  }else{
   result = sendHtmlEMail();
  }
  return result;
 }
 /**
  * 获取邮件发送类型
  * @return
  */
 public int getMail_type() {
  return mail_type;
 }
 /**
  * 设置邮件发送类型
  * @param mail_type
  */
 public void setMail_type(int mail_type) {
  this.mail_type = mail_type;
 }
 /**
  * 发送邮件的例子
  * @param args
  */
 public static void main(String [] args){
  
//  DMail dmail = new DMail();
//  /**/
//  dmail.setFrom_address("发件人地址");//完整邮箱
//  dmail.Add_To_addressList("收件人地址(列表)");//收件人邮箱地址(多个地址以;分割)
//  dmail.Add_Cc_To_addressList("抄送地址(列表)");
//  dmail.Add_Bcc_To_addressList("密送地址(列表)");
//  dmail.setTitle("邮件的标题信息");
//  dmail.setText("邮件内容");
//  dmail.setMail_smtp_host("smtp服务器地址");
//  dmail.setUsername("用户名");
//  dmail.setPasswod("密码");
//  /**/
//  
//  //简单邮件发送方式
//  dmail.setMail_type(DMail.SIMPLEEMAIL);
//  if(dmail.sendEMail()){
//   System.out.println("邮件发送成功");
//  }else{
//   System.out.println("邮件发送失败");
//  }
  
  /**发送带附件的邮件**
  dmail.setMail_type(DMail.MULTIPARTEMAIL);
  dmail.AddAccessories("c://response.txt");
  dmail.AddAccessories("c://12.txt");
  if(dmail.sendEMail()){
   System.out.println("邮件发送成功");
  }else{
   System.out.println("邮件发送失败");
  }/**/
 }
}

资源下载链接为: https://pan.quark.cn/s/140386800631 通用大模型文本分类实践的基本原理是,借助大模型自身较强的理解和推理能力,在使用时需在prompt中明确分类任务目标,并详细解释每个类目概念,尤其要突出类目间的差别。 结合in-context learning思想,有效的prompt应包含分类任务介绍及细节、类目概念解释、每个类目对应的例子和待分类文本。但实际应用中,类目和样本较多易导致prompt过长,影响大模型推理效果,因此可先通过向量检索缩小范围,再由大模型做最终决策。 具体方案为:离线时提前配置好每个类目的概念及对应样本;在线时先对给定query进行向量召回,再将召回结果交给大模型决策。 该方法不更新任何模型参数,直接使用开源模型参数。其架构参考GPT-RE并结合相关实践改写,加入上下文学习以提高准确度,还使用BGE作为向量模型,K-BERT提取文本关键词,拼接召回的相似例子作为上下文输入大模型。 代码实现上,大模型用Qwen2-7B-Instruct,Embedding采用bge-base-zh-v1.5,向量库选择milvus。分类主函数的作用是在向量库中召回相似案例,拼接prompt后输入大模型。 结果方面,使用ICL时accuracy达0.94,比bert文本分类的0.98低0.04,错误类别6个,处理时添加“家居”类别,影响不大;不使用ICL时accuracy为0.88,错误58项,可能与未修改prompt有关。 优点是无需训练即可有较好结果,例子优质、类目界限清晰时效果更佳,适合围绕通用大模型api打造工具;缺点是上限不高,仅针对一个分类任务部署大模型不划算,推理速度慢,icl的token使用多,用收费api会有额外开销。 后续可优化的点是利用key-bert提取的关键词,因为核心词语有时比语意更重要。 参考资料包括
### 不同编程语言中的 CommonMark 封装方法 #### Python 中的 CommonMark 实现 Python 社区提供了 `commonmark` 库来解析和渲染 CommonMark 格式的文档。此库支持将 Markdown 转换为 HTML 或其他格式,同时也允许扩展自定义语法[^4]。 安装方式如下: ```bash pip install commonmark ``` 使用示例代码: ```python import commonmark def render_markdown_to_html(markdown_text): parser = commonmark.Parser() renderer = commonmark.HtmlRenderer() ast = parser.parse(markdown_text) html_output = renderer.render(ast) return html_output markdown_input = "# Hello, World!\nThis is a **bold** text." html_result = render_markdown_to_html(markdown_input) print(html_result) ``` --- #### JavaScript/Node.js 中的 CommonMark 支持 对于前端或 Node.js 开发者来说,可以使用 `marked` 或 `remarkable` 这样的库来处理 CommonMark 文档。这些工具不仅兼容 CommonMark 规范,还支持插件机制以便于扩展功能[^5]。 安装命令: ```bash npm install marked ``` 代码示例: ```javascript const marked = require('marked'); function markdownToHtml(markdownText) { const htmlOutput = marked(markdownText); return htmlOutput; } const inputMarkdown = "# Hello, World!\nThis is a **bold** text."; console.log(markdownToHtml(inputMarkdown)); ``` --- #### C++ 和 Java 的 CommonMark 解决方案 在 C++ 领域,推荐使用官方维护的 [cmark](https://github.com/commonmark/cmark),这是一个高性能且严格遵循 CommonMark 规范的开源库[^6]。通过调用其 API,开发者能够轻松集成到自己的应用程序中。 Java 生态则有多个选项可供选择,比如 `flexmark-java` 是一个完全支持 CommonMark 并具备高度灵活性的选择[^7]。 Maven 依赖配置: ```xml <dependency> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-all</artifactId> <version>0.62.2</version> </dependency> ``` 简单例子: ```java import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.parser.Parser; public class Main { public static void main(String[] args) { Parser parser = Parser.builder().build(); HtmlRenderer renderer = HtmlRenderer.builder().build(); String source = "# Hello, World!\nThis is a **bold** text."; String parsedHtml = renderer.render(parser.parse(source)); System.out.println(parsedHtml); } } ``` --- #### 使用 MoonBit 创建封装库 如果目标是构建跨平台或多用途的 CommonMark 封装解决方案,则可以参考站内的建议,在指定路径下利用 MoonBit 工具快速搭建基础框架[^1]: 执行以下命令初始化项目结构: ```bash cd cmark-frontend-example && moon new cmarkwrap ``` 这一步骤会生成必要的文件夹布局与初始脚手架代码,便于后续开发工作展开。 --- #### Maven 项目管理注意事项 当涉及复杂工程时,合理组织目录至关重要。通常情况下,`main` 文件夹存储业务逻辑及相关资源,而 `test` 则专门用来放置单元测试相关内容[^3]。POM.XML 定义了所有外部依赖关系及其版本号控制策略,因此务必保持清晰明了的设计思路。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值