http://commons.apache.org/email/userguide.html 关于javamail

一:Quick Start
通过SimpleEmail发送邮件
1 java.lang.Object
2   org.apache.commons.mail.Email
3       org.apache.commons.mail.SimpleEmail

1 SimpleEmail email  =   new  SimpleEmail();
2 email.setHostName( " mail.4ya.cn " );
3 email.setAuthentication( " <username> " , " <password> " )
4 email.addTo( " martin.xus@gmail.com " " martin " );
5 email.setFrom( " martin@4ya.cn " " martin " );
6 email.setSubject( " 测试主题 " );
7 email.setMsg( " 这里是邮件内容 " );
8 email.send();

就如代码里字面上的意思一样简单:
1:创建以SimpleEmail对象
2:设定发送信件的smtp服务器,如果没有设定,会寻找系统变量中mail.host值。
3:设定smtp的用户和密码
4:收件人
5:发件人
6:主题
7:内容
8:发送

二:发送带附件的邮件
我们可以发送本机的附件,当然我们也可以发送非本机的附件,如果发送的是一个存在网络上的附件的url,则邮件发送的时候会自动下载,添加到附件中。

   1:)发送本地附件:
1 EmailAttachment attachment  =   new  EmailAttachment();
2 attachment.setPath( " test/test.rar " );
3 attachment.setDisposition(EmailAttachment.ATTACHMENT);
4 attachment.setDescription( " python resource " );
5 attachment.setName( " resource " );

   2:)发送不存在本地的附件
1 EmailAttachment attachment  =   new  EmailAttachment();
2 attachment.setURL( new  URL( " http://www.smilinglibrary.org/sldoc/pics/index03.jpg " ));
3 attachment.setDisposition(EmailAttachment.ATTACHMENT);
4 attachment.setDescription( " 微笑图书馆 " );
5 attachment.setName( " 微笑图书馆 " );


next,添加附件到我们的邮件中
 1 MultiPartEmail email  =   new  MultiPartEmail();
 2 email.setHostName( " mail.4ya.cn " );
 3    email.setAuthentication("<username>","<password>")
 4 email.addTo( " martin.xus@gmail.com " " martin " );
 5 email.setFrom( " martin@4ya.cn " " martin " );
 6 email.setSubject( " 邮件主题 " );
 7 email.setMsg( " 邮件内容 " );

 8 // 添加附件
 9 email.attach(attachment);
10
11 // 发送邮件
12 email.send();

如果需要发送多个附件,只需创建多个EmailAttachement,即可
1 email.attach(attachment1)
2 email.attach(attachment2)

三:发送html格式的邮件
通过HtmlEmail我们可以发送Html格式的邮件:

1 java.lang.Object
2   org.apache.commons.mail.Email
3       org.apache.commons.mail.MultiPartEmail
4           org.apache.commons.mail.HtmlEmail
5

如下:
 1 // HtmlEmail!
 2 HtmlEmail email  =   new  HtmlEmail();
 3 email.setHostName( " mail.4ya.cn " );
 3   email.setAuthentication("<username>","<password>")
 5 email.addTo("martin@4ya.cn " martin " );
 6 email.setFrom("martin.xus@gmail.com " martin " );
 7 email.setSubject( "主题:该邮件包括html格式内容 " );
 
 8 //  embed the image and get the content id
 9 //  注意这里:embed 将帮助我们创建标签如:cid:xxx url
10 URL url  =   new  URL( " http://www.apache.org/images/asf_logo_wide.gif " );
11 String cid  =  email.embed(url,  " Apache logo " );
12
13 /** */ /**
14set the html message
15我们看到HtmlEmail extends Email的,它依然有setMsg(),但是这里发送的邮件包括了插入在邮件内容中的图片,所以不能在使用了setMsg(),而要以setHtmlMsg 或setTextMsg代码
16**/

17 email.setHtmlMsg( " <html>The apache logo - <img src=\ " cid: " +cid+ " \ " ></html> " );
18
19 //  set the alternative message
20 email.setTextMsg( " Your email client does not support HTML messages " );
21
22 // set mail
23 email.send();


朋友讨论的关于一些jakarta commons email出现乱码的问题:

一:通过SimpleEmail发送中文内容出现乱码的问题
SimpleEmail的代码如下
 1public class SimpleEmail extends Email  {
 2    /** */
/**
 3     * Set the content of the mail
 4
     *
 5     * @param
 msg A String.
 6     * @return
 An Email.
 7     * @throws
 EmailException see javax.mail.internet.MimeBodyPart
 8
     *                        for definitions
 9     * @since
 1.0
10     */

11    public Email setMsg(String msg) throws EmailException {
12        if (EmailUtils.isEmpty(msg)) 
{
13            throw new EmailException("Invalid message supplied"
);
14        }

15        setContent(msg, Email.TEXT_PLAIN);
16        return this
;
17    }

18}

只是采用默认的,

1public static final String TEXT_PLAIN = "text/plain";

并没有指定编码。

如果通过SimpleEmail发送,需要指定编码:
Water Ye@ITO  的说明
 
1email.setContent("测试邮件""text/plain;charset=GBK"); 

二:关于附件中文名称乱码的问题:

需使用MimeUtility

原因是在MIME的相应规范中(RFC2047等)说明了附件标题必须是US-ASCII字符, 所以在发送中文标题的附件时需要编码成US-ASCII字符, 有两种编码方式: B (BASE64), Q (Quoted-Printable), 这些方法在MimeUtility里
都已经做了封装, 所以在发送附件时使用如下:

1MimeUtility.encodeText(filename));


 1        EmailAttachment attachment = new  EmailAttachment();
 2        attachment.setPath("c:\\测试.txt"
);
 3
        attachment.setDisposition(EmailAttachment.ATTACHMENT);
 4        attachment.setDescription("测试文件"
);
 5        

 6           //
 7
        attachment.setName(MimeUtility.encodeText("测试文件.txt"));
 8

 9         MultiPartEmail email = new
 MultiPartEmail();
10        email.setHostName("192.168.0.3"
);
11        email.setAuthentication("martin.xus""1234"
);
12        email.addTo("martin.xus@192.168.0.3""martin"
);
13        email.setFrom("martin.xus@192.168.0.3""martin"
);
14

15        email.setSubject("测试带附件"
);
16        email.setMsg("该邮件含附件"
);
17        //添加附件

18         email.attach(attachment);
19        //发送邮件

20        email.send();



<think>我们正在解决Gradle构建中无法解析org.apache.commons:lang3:3.4依赖的问题。根据用户描述,错误是编译Java任务失败,因为无法解析这个依赖。可能的原因和解决方案:1.仓库配置问题:确保在build.gradle文件中配置了正确的仓库,比如MavenCentral。2.依赖不存在或版本错误:检查该依赖在仓库中是否存在,以及版本号是否正确。3.网络问题:检查网络连接,是否能够访问仓库。4.代理设置:如果使用代理,确保Gradle配置了正确的代理设置。5.依赖配置错误:检查依赖的声明方式是否正确。步骤:1.检查build.gradle文件中的仓库配置,确保有mavenCentral()或jcenter()。例如:```repositories{mavenCentral()}```2.检查依赖声明是否正确。对于ApacheCommonsLang3.4,正确的声明应该是:```dependencies{implementation'org.apache.commons:commons-lang3:3.4'}```3.尝试在Maven中央仓库搜索该依赖:https://search.maven.org/artifact/org.apache.commons/commons-lang3/3.4/jar经查,3.4版本确实存在。4.如果之前使用的是本地仓库,可以尝试清除Gradle缓存。使用命令行执行:```gradlecleanbuild--refresh-dependencies```或者删除~/.gradle/caches目录(但要注意这会清除所有缓存)。5.检查网络连接,确保可以访问MavenCentral。如果使用公司内网,可能需要配置代理。6.代理设置:在~/.gradle/gradle.properties文件中配置代理(如果需要):```systemProp.http.proxyHost=proxyhostsystemProp.http.proxyPort=8080systemProp.https.proxyHost=proxyhostsystemProp.https.proxyPort=8080```7.如果问题仍然存在,可能是仓库镜像问题。可以尝试使用阿里云镜像:```repositories{maven{url'https://maven.aliyun.com/repository/public'}mavenCentral()}```8.检查Gradle版本是否过旧。过旧的Gradle版本可能无法正确解析依赖。建议使用较新的Gradle版本。9.如果项目中有多个模块,确保在需要该依赖的模块中正确声明。10.检查是否因为依赖冲突导致。可以使用`gradledependencies`命令查看依赖树。根据引用[1]和[2],之前的问题涉及到类找不到和转换异常,但当前问题主要是依赖解析失败,因此重点在依赖配置和仓库。如果上述方法都不能解决,请检查错误日志的详细内容,看是否有更具体的提示。相关问题:1.如何配置Gradle使用阿里云镜像仓库?2.如何查看Gradle项目的依赖树?3.如何升级Gradle版本?4.Gradle中implementation和compile的区别是什么?</think>### 解决Gradle无法解析`org.apache.commons:lang3:3.4`依赖的方案 #### 1. **检查仓库配置** 在`build.gradle`中添加Maven中央仓库(确保在`repositories`块中): ```groovy repositories { mavenCentral() // 必须添加 // 或阿里云镜像(国内推荐) maven { url 'https://maven.aliyun.com/repository/public' } } ``` > 未配置仓库是依赖解析失败的常见原因[^1]。 #### 2. **验证依赖声明** 确认依赖写法正确(注意`commons-lang3`而非`lang3`): ```groovy dependencies { implementation 'org.apache.commons:commons-lang3:3.4' // ✅ 正确命名 // 错误示例: 'org.apache.commons:lang3:3.4' ❌ } ``` #### 3. **检查依赖可用性** 访问[Maven中央仓库](https://search.maven.org/artifact/org.apache.commons/commons-lang3/3.4/jar)确认: - 版本`3.4`真实存在 - Group ID为`org.apache.commons` - Artifact ID为`commons-lang3` #### 4. **强制刷新依赖缓存** 终端执行(清理旧缓存): ```bash ./gradlew clean build --refresh-dependencies ``` > 缓存损坏可能导致解析失败[^2]。 #### 5. **检查网络与代理** - 确认网络可访问`repo.maven.apache.org` - 如需代理,在`gradle.properties`中添加: ```properties systemProp.https.proxyHost=yourproxy systemProp.https.proxyPort=8080 ``` #### 6. **验证Gradle版本** 过旧版本可能导致兼容问题: ```gradle // gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip ``` > 推荐使用Gradle 7.x+[^3]。 #### 7. **排查依赖冲突** 运行依赖树检查: ```bash ./gradlew app:dependencies --configuration compileClasspath ``` 观察是否有其他库覆盖了该依赖。 #### 8. **尝试其他版本** 若问题仅出现在`3.4`: ```groovy implementation 'org.apache.commons:commons-lang3:3.12.0' // 最新稳定版 ``` --- ### 相关问题 1. 如何配置Gradle使用国内镜像仓库加速依赖下载? 2. `implementation`与`api`在依赖声明中有何区别? 3. 如何排查Gradle构建中的依赖冲突问题? 4. 为什么清理Gradle缓存能解决某些构建问题?[^4] [^1]: 仓库配置错误会导致依赖解析失败 [^2]: 损坏的本地缓存可能引发`NoClassDefFoundError` [^3]: Gradle 7.x+ 优化了依赖解析机制 [^4]: 缓存清理可解决元数据不一致问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值