java mail发送邮件群发 带附件的发送(源代码+详细目录结构)java Email 发送实例

使用JavaMail在Android中实现带有群发和附件的邮件发送 这样,你就可以使用JavaMail库在Android中实现带有群发和附件的邮件发送了。记得替换代码中的必要参数,例如SMTP服务器地址、用户名、密码和发件人邮箱地址,并根据你的需求调整附件和收件人列表。在Android应用程序中,有时需要通过电子邮件发送消息,并且可能需要将邮件发送给多个收件人,并附加文件作为附件。首先,确保你的Android项目已经添加了JavaMail库的依赖。替换为你要发送邮件的收件人的电子邮件地址数组,需要替换为你的SMTP服务器地址,需要替换为你的邮箱的用户名和密码, 阅读详情

项目用到Java程序发送Email邮件从网上查了一些资料自己整理一个Demo 供大家参考


此邮件实现功能: 单发、群发邮件,可以带多个附件。欢迎拍砖


1、需要用到的jar包和项目的目录结构



需要自己准备以下两个jar,google自己搜地址

activation.jar

mail.jar


Code代码实现

-----------------------------------------------------------发送邮件需要的基本信息-----------------------------------------------------


/**
 * java邮件测试
 * @author Administrator
 *
 */
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Vector;


import javax.mail.internet.MimeUtility;


/**
 * 发送邮件需要的基本信息
 * 
 */
public class MailTest {
 
 private String mailServerHost;      //发送邮件的服务器
 private String mailServerPort="25";    //发送邮件的服务器的端口
 private String fromAddress;            //发送者地址
 private String toAddress;              //接收者地址
 private String username;         //发送者用户名
 private String password;         //发送者密码
 private boolean validate=true;      //是否需要身份验证
 private String subject;           //邮件主题
 private String content;          //邮件内容
 private Map<String, String> mailType;        //邮箱类型
 private String  filename = "";// 附件文件名
 private Vector file = new Vector();// 附件文件集合
 /**
  * 得到邮件会话属性
  *
  */
 public Properties getProperties(){
  Properties p = new Properties();
  p.put("mail.smtp.host", this.mailServerHost);
  p.put("mail.smtp.port", this.mailServerPort);
  p.put("mail.smtp.auth", validate?"true":"false");
  return p;
 }
 
 public String getMailServerHost() {
  return mailServerHost;
 }
 public void setMailServerHost(String mailServerHost) {
  this.mailServerHost = mailServerHost;
 }
 public String getMailServerPort() {
  return mailServerPort;
 }
 public void setMailServerPort(String mailServerPort) {
  this.mailServerPort = mailServerPort;
 }
 public String getFromAddress() {
  return fromAddress;
 }
 public void setFromAddress(String fromAddress) {
  this.fromAddress = fromAddress;
 }
 public String getToAddress() {
  return toAddress;
 }
 public void setToAddress(String toAddress) {
  this.toAddress = toAddress;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
  this.fromAddress=username;
  if(username!=null&&username.length()>0){
   String fromEmailExt=username.substring(username.lastIndexOf("@")+1,username.lastIndexOf("."));
   this.mailServerHost=getMailType().get(fromEmailExt);
  }
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public boolean isValidate() {
  return validate;
 }
 public void setValidate(boolean validate) {
  this.validate = validate;
 }
 
 public String getSubject() {
  return subject;
 }


 public void setSubject(String subject) {
  this.subject = subject;
 }


 public String getContent() {
  return content;
 }
 public void setContent(String content) {
  this.content = content;
 }


 public Map<String, String> getMailType() {
  mailType=new HashMap<String, String>();
  mailType.put("163","smtp.163.com");
  mailType.put("139","smtp.139.com");
  mailType.put("126","smtp.126.com");
  mailType.put("qq", "smtp.qq.com");
  mailType.put("sohu", "smtp.sohu.com");
  mailType.put("live","smtp.live.cn");
  mailType.put("msn","smtp.msn.com");
  mailType.put("kum", "mail.kum.net.cn");
  mailType.put("hotmail","smtp.hotmail.cn");
  return mailType;
 }


 public void setMailType(Map<String, String> mailType) {
  this.mailType = mailType;
 }
 
 public void attachfile(String fname) {  
     file.addElement(fname);  
 } 
 
 
 
 public Vector getFile() {
	return file;
}


public void setFile(Vector file) {
	this.file = file;
}


/** 
  * 
  * 方法说明:把主题转换为中文
  * 输入参数:String strText
  * 返回类型: 
  */  
 public String transferChinese(String strText) {  
     try {  
         strText = MimeUtility.encodeText(new String(strText.getBytes(),  
                 "GB2312"), "GB2312", "B");  
     } catch (Exception e) {  
         e.printStackTrace();  
     }  
     return strText;  
 }


public String getFilename() {
	return filename;
}


public void setFilename(String filename) {
	this.filename = filename;
}  


 
 
 
 
}


------------------------------发邮件时的身份验证器-------------------------------

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


/**
 * 发邮件时的身份验证器
 */
public class CardId extends Authenticator{
 
 String userName = null;
 String password = null;
 
 public CardId(String userName, String password) {
  this.userName = userName;
  this.password = password;
 }
 @Override
 protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(userName, password);
 }
 
}

-----------------------邮件发送器类,也是主体部分---------------------------

import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;




/**
 * 邮件发送器
 * 
 */
public class MailContent{
 
 /**
  * 根据邮件会话属性和密码验证器构造一个发送邮件的session    
  * @return
  */
 protected  static Session getSession(MailTest MailTest){
  if(MailTest == null){
   return null;
  }
  CardId authenticator = null;
  Properties pro = MailTest.getProperties();
  if(MailTest.isValidate()){
   authenticator = new CardId(MailTest.getUsername(),MailTest.getPassword());
  }
  return Session.getDefaultInstance(pro, authenticator);
 }
 
 /**
  * 发送文本格式邮件
  * @return
  */
 public static boolean sendTextMail(MailTest MailTest){
  try {
        
         //得到session
         Session mailSession = getSession(MailTest); 


   //根据session创建一个邮件消息
   Message mailMessage=new MimeMessage(mailSession);
   
   //创建邮件发送者的地址
   Address fromAddress=new InternetAddress(MailTest.getFromAddress());
 //设置邮件发送者的地址
   mailMessage.setFrom(fromAddress);
   //1、创建邮件接收者的地址(只能给一个用户发送邮件)
  //  Address toAddress=new InternetAddress(MailTest.getToAddress());
   //设置邮件接收者地址
   //mailMessage.setRecipient(Message.RecipientType.TO, toAddress);
   
   
   //2、创建邮件接收者的地址(可以给多个用户同时发送邮件 不同接受者之间用,隔开)
   mailMessage.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(MailTest.getToAddress())) ;
     
   //设置邮件的主题(转成中文)
   mailMessage.setSubject(MailTest.getSubject());
// mailMessage.setSubject(MailTest.transferChinese(MailTest.getSubject()));
   //设置邮件的发送内容
   mailMessage.setText(MailTest.getContent());
   
   //设置发送邮件的时间
   mailMessage.setSentDate(new Date());
   
   //发送邮件
   Transport.send(mailMessage);
   
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**
  * 发送html格式邮件
  * @return
  */
 public static boolean sendHtmlMail(MailTest MailTest) {
  try {
   //得到session
   Session mailSession = getSession(MailTest);


   //根据session创建一个邮件消息
   Message mailMessage = new MimeMessage(mailSession);


   //创建邮件发送者的地址
   Address fromAddress=new InternetAddress(MailTest.getFromAddress());
 //设置邮件发送者的地址
   mailMessage.setFrom(fromAddress);
//   //1、创建邮件接收者的地址
//   Address toAddress=new InternetAddress(MailTest.getToAddress());
//   //设置邮件接收者地址(可以给一个用户发送邮件)
//   mailMessage.setRecipient(Message.RecipientType.TO, toAddress);
   
   //2、创建邮件接收者的地址(可以给多个用户同时发送邮件 不同接受者之间用,隔开)
   mailMessage.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(MailTest.getToAddress())) ;
     
   //设置邮件的主题(转成中文)
   mailMessage.setSubject(MailTest.getSubject());
//   mailMessage.setSubject(MailTest.transferChinese(MailTest.getSubject()));
   //设置邮件消息发送的时间
   mailMessage.setSentDate(new Date());


   //MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
   Multipart mainPart = new MimeMultipart();


   //创建一个包含HTML内容的MimeBodyPart
   BodyPart html = new MimeBodyPart();


   //设置HTML内容
   html.setContent(MailTest.getContent(), "text/html; charset=UTF-8");
   
   //将内容添加到容器对象中
   mainPart.addBodyPart(html);
   
   // 向Multipart添加附件  
   Vector file=MailTest.getFile();
   String filename=MailTest.getFilename();
   Enumeration efile = file.elements();  
   while (efile.hasMoreElements()) {  


       MimeBodyPart mbpFile = new MimeBodyPart();  
       filename = efile.nextElement().toString();  
       FileDataSource fds = new FileDataSource(filename);  
       mbpFile.setDataHandler(new DataHandler(fds));  
      //这个方法可以解决附件乱码问题   
       String filename1= new String(fds.getName().getBytes(),"ISO-8859-1");  


        mbpFile.setFileName(filename1);  
       // 向MimeMessage添加(Multipart代表附件)  
       mainPart.addBodyPart(mbpFile);  


   }  
   file.removeAllElements(); 
   
   //将MiniMultipart对象设置为邮件内容
   mailMessage.setContent(mainPart);


   //发送邮件
   Transport.send(mailMessage);
   
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
 }
 
}

---------------------------------------测试-----------------------------------------

/**
 * 测试类
 *
 */
public class SendMessage{
	public  void test() {
		MailTest senderInfo=new MailTest();
		  senderInfo.setUsername("809044093@qq.com"); //用户名
		  senderInfo.setPassword("809044093");      //密码(这里写你自己邮箱的密码 ^_^)
		  senderInfo.setToAddress("245173677@qq.com,809044093@qq.com");//接收者(如果是多个邮箱 每个邮箱之间用,分割)
		  senderInfo.setSubject("这是群发邮件主题"); //主题
		  senderInfo.setContent("<a href='http://blog.youkuaiyun.com/prefectjava'>点击此处查看更多内容</a>"); //内容
		  
		  senderInfo.attachfile("d:\\1.txt");
		  senderInfo.attachfile("d:\\index.html");//如果还有附件继续累加即可,格式不限制
	      //发送(HTML格式的)
		  MailContent.sendHtmlMail(senderInfo);
		  //发送纯文本格式
//		  MailContent.sendTextMail(senderInfo);
		  
	}
	
 public static void main(String[] args)  {
 
     new SendMessage().test();
 }
}

以上为具体代码实现。


PS:程序时发现了以下两个些错误,贴出来跟大家分享分享

希望对大家有帮助。 

错误一: 
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 
解决方法:到D:\MyEclipse 6.5 

\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806 

\data\libraryset\EE_5目录下找到javaee.jar删除其中到mail文件夹。 

错误二: 
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream 
解决方法: 

下载mail.jar和activation.jar文件加入到工程中。 

错误三:

如果出现 以下异常 

javax.mail.AuthenticationFailedException

检查是否邮箱的用户名 、密码错误。


@Override
 protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(userName, password);
 }

★这个身份验证的是重写的父类的方法,方法名不要自己定义 否则出错 



Android 使用javamail发送邮件 此源码是使用javamail发送邮件,可以实现静默发送邮件,可以发送附件资源等。有相应的使用说明,快捷好用 立即下载

相关推荐

搞定安卓11+抓包难题:用Kitsune Mask、magic_overlayfs和LSPosed三件套绕过SSL Pinning(保姆级教程)

本文详细解析了安卓11+系统中抓包面临的核心挑战,包括SSL Pinning和Root检测机制,并提供了使用Kitsune Mask、magic_overlayfs和LSPosed三件套的完整解决方案。通过动态分区技术解析和工具链配置,帮助开发者绕过安全限制,实现高效抓包分析。

weixin_42665255的博客 441

Java实现邮件的发送(E-mail)

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。一、邮件服务器与传输协议要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

q_qwp_p的博客 4万+

Windows11下QGIS 3.34.4安装Geo-SAM插件全流程(附RTX3060 CUDA12.0配置技巧)

本文详细介绍了在Windows 11系统中为QGIS 3.34.4安装和配置Geo-SAM插件的完整流程,特别针对RTX 3060显卡用户提供了CUDA 12.0与PyTorch环境的精准搭建方案。通过预编码与交互式分割两大核心步骤,该插件能显著提升遥感图像半自动标注的效率,降低硬件门槛,是地理信息处理领域融合AI技术的实用指南。

weixin_29089057的博客 294

java实现发送邮件

在上面的代码中,我们将与服务器连接的信息封装在Properties对象中,在创建Session对象时,需要传入两个参数 ,第一个参数就是我们封装的服务器连接信息,第二个参数为用户认证对象,因为Authenticator为抽象类,所以创建一个匿名子类对象并将邮箱账号和授权码传入。在生活中,我们经常会发送带有附件的邮件,接下来,我们就通过java程序发送带有附件的邮件,要发送带有附件的邮件,不能直接设置正文内容,需要用到。我们有时候需要在邮件的正文中嵌套图片,那么这个功能在java程序中如何实现呢?

weixin_72764731的博客 7796

基于Vivado2025的UltraScale+时序收敛优化实战案例

深入解析在Vivado2025环境中针对UltraScale+架构的时序收敛挑战,结合实际设计案例,分享关键优化策略与操作技巧,显著提升设计性能与收敛效率。vivado2025的更新特性为时序优化带来新机遇。

weixin_33660045的博客 343

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6500

java 邮件发送的几种方式

【代码】java 邮件发送的几种。

yhx101的博客 3682

电力系统设计实战:如何用ETAP绘制一次接线图并优化供电方案

本文详细介绍了如何使用ETAP软件进行电力系统一次接线图的绘制与供电方案优化。从基础环境配置到主接线拓扑构建,再到典型接线方式的对比分析与智能优化,为工业与民用电力系统设计提供实用指南。通过ETAP的可靠性分析和动态仿真功能,帮助工程师选择最优供电方案,提升系统可靠性和运维效率。

weixin_29250573的博客 204

Java实现邮件发送功能

防止因发送文件时间过长,导致前端响应过久。每一个文本、图片、附件可以分为一个。可放在utils目录下。

supercool7的博客 6093

DeepSeek API调用太复杂?OneAPI一站式聚合解决方案

本文介绍了OneAPI如何作为一站式聚合解决方案,简化DeepSeek API的调用流程。通过统一接口、智能路由和模型映射等核心功能,OneAPI大幅降低了多API适配的复杂性,提升开发效率。文章还提供了详细的部署指南和高阶使用技巧,帮助开发者快速实现API聚合管理。

weixin_27215337的博客 381

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

CoreLink NI-700的ASNI(AXI系统网络接口)完成者单元负责接收并处理来自AXI请求者设备的请求。这些单元将事务打包成根据NI-700通用传输(GT)协议的Flits,并将GT响应Flits解包成AXI响应。AXI与GT协议之间的请求、数据和响应事务的转换:确保AXI事务可以被NI-700网络正确处理,并将GT协议的响应正确转换回AXI响应。入站事务的突发拆分。

CodingCos的博客 1321

Java实现发送邮件(含个人和企业邮箱,以及可能遇到的报错等完整讲述)

java实现完整的发送邮箱(含个人和企业邮箱,并有报错的处理方法)

RYH6817的博客 9548

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java email发送网络图片_java程序中使用JavaMail发送带图片和附件的邮件详解

本文章主要介绍了Java程序中使用JavaMail发送带图片和附件的邮件,JavaMail是专门用来处理邮件的Java API,需要的朋友可以参考下我们常常在邮件中添加附件,以达到传输较大文件的目的。而上一篇文章只是将本机的一张图片内嵌到邮件的 HTML 格式的正文当中,这样的邮件显得不够丰富多彩。我们想要一封正文部分图文并茂,而游客附带若干附件的邮件。下面是代码结构中3个重要的方法:MimeBo...

weixin_39613089的博客 1263

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java Mail多人群发与多附件发送

近期公司的项目用到了Java Mail来发送注冊邮件,只是。开发的时候都是使用封装好的JAR,曾经也不是非常了解Java Mail的使用原理。网上非常多代码都是仅仅有一部分,看一看也跑不起来,今天正好有时间,自己写了一个实现。放在了自己的工具JAR里。闲话不多说,我的项目是使用Gr...

weixin_30435261的博客 225

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

使用HuTool工具实现邮件发送

在Java中发送邮件主要品依靠javax.mail包,但是由于使用比较繁琐,因此Hutool针对其做了封装。由于依赖第三方包,因此将此工具类归类到extra模块中。

m0_51666421的博客 5211

java mail api_使用JavaMail API发送邮件

packagecom.iot.common.email;importjava.io.File;importjavax.activation.DataHandler;importjavax.activation.DataSource;importjavax.activation.FileDataSource;importjavax.mail.Multipart;importjavax.mail.in...

weixin_33358246的博客 375

简单的java mail邮件群发系统

import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * Created by tarzan liu on 2020/5/9. */ @Data @NoArgsConstructor @AllArgsConstructor .

洛阳泰山的博客 3308

Spring项目邮件发送工具类的使用

Java中的邮件发送有对应的类为Email,在使用邮件的时候,需要在项目中导入坐标 <!--javaMail--> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.6</version> </dependency> <depend

zixing08的博客 1090

电子邮件发送jar

导入avax.mail-1.6.1.jar和本jar包 运行测试代码:成功则环境正常 import java.io.File; import 邮件发送.*; public class test { public static void main(String arg[]){//main--来自高金磊 File file=new File("C:\\Users\\gao\...

qq_31714549的博客 1683

Java Email群发邮件

[size=large]JAVA邮件群发 摘 要:邮件群发是消息在Internet传递的最好办法,同时也是垃圾邮件的来源。本文以使用JAVAMAIL为例,讨论实现大规模邮件发送的方法和技巧。 [url]http://www.blogjava.net/zhouxing/archive/2007/07/23/131799.html[/url] 关键字:SMTP、MIME、JAVAMAIL、...

xueliangEmail的专栏 293

整合篇:零基础学习与使用Email

目录1、场景介绍2、获取授权码2.1、163邮箱获取授权码2.2、qq邮箱获取授权码3、创建工程4、添加配置4.1、163邮箱配置4.2、qq邮箱设置5、发送TEXT文本6、发送HTML文本7、发送带图片邮件8、发送带附件邮件9、发送模板邮件 配套资料,免费下载 链接:https://pan.baidu.com/s/1jA217UgqXpONi_fV-aOzqw 提取码:bm2g 复制这段内容后打开百度网盘手机App,操作更方便哦 1、场景介绍 在实际的开发工程中,我们经常会发送一些验证信息:验证邮箱是否

轻松的小希 5295

Android中 使用Javamail发送Email带群发加附件(绝对可用!)

之前写了一篇关于Android中发送Email的文章,里面用到的是隐式的intent来激活系统自带的邮件发送功能。 今天花了一天来自己实现这个邮件发送功能(主要是网上的代码太坑...) 这里用gmail作为发送方的邮箱,其他网易,新浪什么的应该也ok,QQ貌似不行。 资源来自:javamail-android 下面是实现步骤及相关代码。 项目添加jar包 将activation.jar

爱冒险的技术宅 7746

centos java发送邮件发不出去_Java发送邮件(网易163邮箱)(简单易操作篇)

[TOC]一、前言想必发送邮件在日常开发中是十分常见的需求吧,鉴于官方网站一些不友好的例子,自己简化了下邮件发送的工具类。废话不多说,这次的分享是Java发送邮件,进行发送邮件的邮箱是网易163邮箱,其中分为群发和单发邮件两个功能。先说下有什么步骤吧。 (若想直接借鉴的可以跳转到具体代码那一块,有完整的代码)二、事先准备步骤 未注册邮箱的先注册邮箱,网易163邮箱的注册地址:https://mai...

weixin_32742673的博客 592
上一篇: 百度地图开发简单案例(源代码)
下一篇: 常用正则表达式大全,手机、电话、邮箱、身份证(最严格的验证)、IP地址、网址、日期等,一般前台js验证
prefectjava
博客等级 码龄16年 26粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值