好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现简单发送邮件功能

本文实例为大家分享了java实现简单发送邮件的具体代码,供大家参考,具体内容如下

添加依赖

?

1

2

3

4

5

6

7

8

9

10

11

12

13

<!--发送邮件API-->

    <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->

    < dependency >

      < groupId >javax.mail</ groupId >

      < artifactId >javax.mail-api</ artifactId >

      < version >1.6.2</ version >

    </ dependency >

    <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->

    < dependency >

      < groupId >com.sun.mail</ groupId >

      < artifactId >javax.mail</ artifactId >

      < version >1.6.2</ version >

</ dependency >

自定义异常类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class EmailException extends Exception {

 

     public EmailException(String message) {

         super (message);

     }

     public EmailException() {

             super ();

     }

     /**

     * 

     */

     private static final long serialVersionUID = 115631651651651651L;

 

}

IMAP协议读取邮件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467

468

469

470

471

472

473

474

475

476

477

478

479

480

481

482

483

484

485

486

487

488

489

490

491

492

493

494

495

496

497

498

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Properties;

 

import javax.mail.Address;

import javax.mail.BodyPart;

import javax.mail.Flags;

import javax.mail.Folder;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.Part;

import javax.mail.Session;

import javax.mail.Store;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

 

import com.sun.mail.util.MailSSLSocketFactory;

 

 

public class IMAPReceiveMail {

     private String user = "" ; //账号

     private String password = "" ; //密码

     private   String HOST = "" ; // smtp服务器

//    private Properties props = null;

     private Folder folder = null ; //收件箱

     private Store store  = null ; //实例对象

//    final String pop3 = "IMAP";

     final String imap = "imap" ;

     public IMAPReceiveMail(String user,String password) {

         this .password = password; //密码

         this .user = user; //账户

     }

    

     /**

     * @param message 邮件对象

     * @param to 收件人

     * @throws MessagingException

     * @throws IOException

     */

//    public void forwardMail(Message message,String to) throws MessagingException, IOException {

//            Message forward = new MimeMessage(session);

//            forward.setSubject(message.getSubject());

//            forward.setFrom(new InternetAddress(to));

//            forward.setRecipient(Message.RecipientType.TO, new InternetAddress(to));

//            forward.setSentDate(new Date());

//            forward.setContent(message.getContent(), message.getContentType());

//

//            Transport smtp = session.getTransport("smtp");

//            smtp.connect(HOST, user, password);//连接服务器的邮箱

//            smtp.sendMessage(forward, forward.getAllRecipients());

//            smtp.close();

//     }

     /**

     * 接收邮件

     */

     public   Folder resceive() throws Exception {

         /**

         * 因为现在使用的是163邮箱 而163的 pop地址是 pop3.163.com 端口是 110 比如使用好未来企业邮箱 就需要换成 好未来邮箱的

         * pop服务器地址 pop.263.net 和 端口 110

         */

         String duankou = "" ; // 端口号

         String servicePath = "" ; // 服务器地址

         if (user== null ||user.length()== 0 ) throw new EmailException( "账户不能为空!!!!" );

         if (password== null ||password.length()== 0 ) throw new EmailException( "密码不能为空!!!!" );

         if (user.contains( "@163" )) {

             duankou = "143" ; // 端口号

             servicePath = "imap.163.com" ; // 服务器地址

         } else if (user.contains( "@qq" )) {

             duankou = "993" ; // 端口号

             servicePath = "imap.qq.com" ; // 服务器地址

         } else {

             throw new EmailException( "不支持该协议" );

         }

 

         // 准备连接服务器的会话信息

         Properties props = new Properties();

        

         props.setProperty( "mail.store.protocol" , imap); // 使用pop3协议

         props.setProperty( "mail.imap.socketFactory.fallback" , "false" );

         props.setProperty( "mail.imap.port" , duankou); // 端口

         props.setProperty( "mail.imap.socketFactory.port" , duankou); // 端口

         props.setProperty( "mail.transport.protocol" , "smtp" ); // 发送邮件协议名称

         props.setProperty( "mail.smtp.auth" , "true" );   //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条

         props.setProperty( "mail.host" , HOST);

        

         //关闭读取附件时分批获取 BASE64 输入流的配置

         props.setProperty( "mail.imap.partialfetch" , "false" );

         props.setProperty( "mail.imaps.partialfetch" , "false" );

//        props.setProperty("mail.pop3.host", servicePath); // pop3服务器

        

//        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 

//        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

//        props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);

         MailSSLSocketFactory sf = new MailSSLSocketFactory(); //ssl加密

        sf.setTrustAllHosts( true );

        props.put( "mail.imap.ssl.enable" , "true" );

        props.put( "mail.imap.ssl.socketFactory" , sf);

        

         // 创建Session实例对象

        Session session = Session.getInstance(props);

         session.setDebug( false );

         store = session.getStore(imap);

         store.connect(servicePath,user,password); // 163邮箱程序登录属于第三方登录所以这里的密码是163给的授权密码而并非普通的登录密码

         // 获得收件箱

         folder = store.getFolder( "INBOX" );

         /*

         * Folder.READ_ONLY:只读权限 Folder.READ_WRITE:可读可写(可以修改邮件的状态)

         */

         folder.open(Folder.READ_WRITE); // 打开收件箱

         // 由于POP3协议无法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数

//        System.out.println("未读邮件数: " + folder.getUnreadMessageCount());

         // 由于POP3协议无法获知邮件的状态,所以下面得到的结果始终都是为0

//        System.out.println("删除邮件数: " + folder.getDeletedMessageCount());

//        System.out.println("新邮件: " + folder.getNewMessageCount());

         // 获得收件箱中的邮件总数

//        System.out.println("邮件总数: " + folder.getMessageCount());

         // 得到收件箱中的所有邮件,并解析

//        Message[] messages = folder.getMessages();

//        parseMessage(messages);

         // 得到收件箱中的所有邮件并且删除邮件

//        deleteMessage(messages);

 

         // 释放资源

//        folder.close(true);

//        store.close();

         return folder;

     }

     public void Colsefolder() throws MessagingException { //关闭资源

         if (folder!= null ) {

             folder.close();

         }

         if (store!= null ) {

             store.close();

         }

     }

     /**

     * 解析邮件

     * 

     * @param messages 要解析的邮件列表

     */

     public   void parseMessage(Message... messages) throws MessagingException, IOException {

         if (messages == null || messages.length < 1 )

             throw new MessagingException( "未找到要解析的邮件!" );

         // 解析所有邮件

         for ( int i = 0 , count = messages.length; i < count; i++) {

             MimeMessage msg = (MimeMessage) messages[i];

             System.out.println( "------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- " );

             System.out.println( "主题: " + getSubject(msg));

             System.out.println( "发件人: " + getFrom(msg));

             System.out.println( "收件人:" + getReceiveAddress(msg, null ));

             System.out.println( "发送时间:" + getSentDate(msg, null ));

             System.out.println( "是否已读:" + isSeen(msg));

             System.out.println( "邮件优先级:" + getPriority(msg));

             System.out.println( "是否需要回执:" + isReplySign(msg));

             System.out.println( "邮件大小:" + msg.getSize() * 1024 + "kb" );

             boolean isContainerAttachment = isContainAttachment(msg);

             System.out.println( "是否包含附件:" + isContainerAttachment);

             if (isContainerAttachment) {

                 saveAttachment(msg, "f:\\mailTest\\" + msg.getSubject() + "_" + i + "_" ); // 保存附件

             }

             StringBuffer content = new StringBuffer( 30 );

             getMailTextContent(msg, content);

             System.out.println( "邮件正文:" + (content.length() > 100 ? content.substring( 0 , 100 ) + "..." : content));

             System.out.println( "------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- " );

             System.out.println();

         }

     }

 

     /**

     * 解析邮件

     * 

     * @param messages 要解析的邮件列表

     */

     public   void deleteMessage(Message... messages) throws MessagingException, IOException {

         if (messages == null || messages.length < 1 )

             throw new MessagingException( "未找到要解析的邮件!" );

 

         // 解析所有邮件

         for ( int i = 0 , count = messages.length; i < count; i++) {

 

             /**

             * 邮件删除

             */

             Message message = messages[i];

             String subject = message.getSubject();

             // set the DELETE flag to true

             message.setFlag(Flags.Flag.DELETED, true );

             System.out.println( "Marked DELETE for message: " + subject);

 

         }

     }

 

     /**

     * 获得邮件主题

     * 

     * @param msg 邮件内容

     * @return 解码后的邮件主题

     */

     public   String getSubject(MimeMessage msg) throws UnsupportedEncodingException, MessagingException {

         return MimeUtility.decodeText(msg.getSubject());

     }

 

     /**

     * 获得邮件发件人

     * 

     * @param msg 邮件内容

     * @return 姓名 <Email地址>

     * @throws MessagingException

     * @throws UnsupportedEncodingException

     */

     public   String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {

         String from = "" ;

         Address[] froms = msg.getFrom();

         if (froms.length < 1 )

             throw new MessagingException( "没有发件人!" );

 

         InternetAddress address = (InternetAddress) froms[ 0 ];

         String person = address.getPersonal();

         if (person != null ) {

             person = MimeUtility.decodeText(person) + " " ;

         } else {

             person = "" ;

         }

         from = person + "<" + address.getAddress() + ">" ;

 

         return from;

     }

    

    

     public   String getFromAddress(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {

         String from = "" ;

         Address[] froms = msg.getFrom();

         if (froms.length < 1 )

             throw new MessagingException( "没有发件人!" );

 

         InternetAddress address = (InternetAddress) froms[ 0 ];

         from = address.getAddress();

 

         return from;

     }

     /**

     * 根据收件人类型,获取邮件收件人、抄送和密送地址。如果收件人类型为空,则获得所有的收件人

     * <p>

     * Message.RecipientType.TO 收件人

     * </p>

     * <p>

     * Message.RecipientType.CC 抄送

     * </p>

     * <p>

     * Message.RecipientType.BCC 密送

     * </p>

     * 

     * @param msg  邮件内容

     * @param type 收件人类型

     * @return 收件人1 <邮件地址1>, 收件人2 <邮件地址2>, ...

     * @throws MessagingException

     */

     public   String getReceiveAddress(MimeMessage msg, Message.RecipientType type) throws MessagingException {

         StringBuffer receiveAddress = new StringBuffer();

         Address[] addresss = null ;

         if (type == null ) {

             addresss = msg.getAllRecipients();

         } else {

             addresss = msg.getRecipients(type);

         }

 

         if (addresss == null || addresss.length < 1 )

             throw new MessagingException( "没有收件人!" );

         for (Address address : addresss) {

             InternetAddress internetAddress = (InternetAddress) address;

             receiveAddress.append(internetAddress.toUnicodeString()).append( "," );

         }

 

         receiveAddress.deleteCharAt(receiveAddress.length() - 1 ); // 删除最后一个逗号

 

         return receiveAddress.toString();

     }

 

     /**

     * 获得邮件发送时间

     * 

     * @param msg 邮件内容

     * @return yyyy年mm月dd日 星期X HH:mm

     * @throws MessagingException

     */

     public   String getSentDate(MimeMessage msg, String pattern) throws MessagingException {

         Date receivedDate = msg.getSentDate();

         if (receivedDate == null )

             return "" ;

 

         if (pattern == null || "" .equals(pattern))

             pattern = "yyyy年MM月dd日 E HH:mm " ;

 

         return new SimpleDateFormat(pattern).format(receivedDate);

     }

 

     /**

     * 判断邮件中是否包含附件

     * 

     * @param msg 邮件内容

     * @return 邮件中存在附件返回true,不存在返回false

     * @throws MessagingException

     * @throws IOException

     */

     public   boolean isContainAttachment(Part part) throws MessagingException, IOException {

         boolean flag = false ;

         if (part.isMimeType( "multipart/*" )) {

             MimeMultipart multipart = (MimeMultipart) part.getContent();

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 String disp = bodyPart.getDisposition();

                 if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {

                     flag = true ;

                 } else if (bodyPart.isMimeType( "multipart/*" )) {

                     flag = isContainAttachment(bodyPart);

                 } else {

                     String contentType = bodyPart.getContentType();

                     if (contentType.indexOf( "application" ) != - 1 ) {

                         flag = true ;

                     }

 

                     if (contentType.indexOf( "name" ) != - 1 ) {

                         flag = true ;

                     }

                 }

 

                 if (flag)

                     break ;

             }

         } else if (part.isMimeType( "message/rfc822" )) {

             flag = isContainAttachment((Part) part.getContent());

         }

         return flag;

     }

 

     /**

     * 判断邮件是否已读

     * 

     * @param msg 邮件内容

     * @return 如果邮件已读返回true,否则返回false

     * @throws MessagingException

     */

     public   boolean isSeen(MimeMessage msg) throws MessagingException {

         return msg.getFlags().contains(Flags.Flag.SEEN);

     }

 

     /**

     * 判断邮件是否需要阅读回执

     * 

     * @param msg 邮件内容

     * @return 需要回执返回true,否则返回false

     * @throws MessagingException

     */

     public   boolean isReplySign(MimeMessage msg) throws MessagingException {

         boolean replySign = false ;

         String[] headers = msg.getHeader( "Disposition-Notification-To" );

         if (headers != null )

             replySign = true ;

         return replySign;

     }

 

     /**

     * 获得邮件的优先级

     * 

     * @param msg 邮件内容

     * @return 1(High):紧急 3:普通(Normal) 5:低(Low)

     * @throws MessagingException

     */

     public   String getPriority(MimeMessage msg) throws MessagingException {

         String priority = "普通" ;

         String[] headers = msg.getHeader( "X-Priority" );

         if (headers != null ) {

             String headerPriority = headers[ 0 ];

             if (headerPriority.indexOf( "1" ) != - 1 || headerPriority.indexOf( "High" ) != - 1 )

                 priority = "紧急" ;

             else if (headerPriority.indexOf( "5" ) != - 1 || headerPriority.indexOf( "Low" ) != - 1 )

                 priority = "低" ;

             else

                 priority = "普通" ;

         }

         return priority;

     }

 

     /**

     * 获得邮件文本内容

     * 

     * @param part    邮件体

     * @param content 存储邮件文本内容的字符串

     * @throws MessagingException

     * @throws IOException

     */

     public   void getMailTextContent(Part part, StringBuffer content) throws MessagingException, IOException {

         // 如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断

         boolean isContainTextAttach = part.getContentType().indexOf( "name" ) > 0 ;

         if (part.isMimeType( "text/*" ) && !isContainTextAttach) {

             content.append(part.getContent().toString());

         } else if (part.isMimeType( "message/rfc822" )) {

             getMailTextContent((Part) part.getContent(), content);

         } else if (part.isMimeType( "multipart/*" )) {

             Multipart multipart = (Multipart) part.getContent();

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 getMailTextContent(bodyPart, content);

             }

         }

     }

 

     /**

     * 保存附件

     * 

     * @param part    邮件中多个组合体中的其中一个组合体

     * @param destDir 附件保存目录

     * @throws UnsupportedEncodingException

     * @throws MessagingException

     * @throws FileNotFoundException

     * @throws IOException

     */

     public   void saveAttachment(Part part, String destDir)

             throws UnsupportedEncodingException, MessagingException, FileNotFoundException, IOException {

         if (part.isMimeType( "multipart/*" )) {

             Multipart multipart = (Multipart) part.getContent(); // 复杂体邮件

             // 复杂体邮件包含多个邮件体

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 // 获得复杂体邮件中其中一个邮件体

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 // 某一个邮件体也有可能是由多个邮件体组成的复杂体

                 String disp = bodyPart.getDisposition();

                 if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {

                     InputStream is = bodyPart.getInputStream();

                     saveFile(is, destDir, decodeText(bodyPart.getFileName()));

                 } else if (bodyPart.isMimeType( "multipart/*" )) {

                     saveAttachment(bodyPart, destDir);

                 } else {

                     String contentType = bodyPart.getContentType();

                     if (contentType.indexOf( "name" ) != - 1 || contentType.indexOf( "application" ) != - 1 ) {

                         saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName()));

                     }

                 }

             }

         } else if (part.isMimeType( "message/rfc822" )) {

             saveAttachment((Part) part.getContent(), destDir);

         }

     }

 

     /**

     * 读取输入流中的数据保存至指定目录

     * 

     * @param is       输入流

     * @param fileName 文件名

     * @param destDir  文件存储目录

     * @throws FileNotFoundException

     * @throws IOException

     */

     private   void saveFile(InputStream is, String destDir, String fileName)

             throws FileNotFoundException, IOException {

         BufferedInputStream bis = new BufferedInputStream(is);

         BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( new File(destDir + fileName)));

         int len = - 1 ;

         while ((len = bis.read()) != - 1 ) {

             bos.write(len);

             bos.flush();

         }

         bos.close();

         bis.close();

     }

 

     public void SetSEEN(MimeMessage message) throws MessagingException { //设置文件已读

         message.setFlag(Flags.Flag.SEEN, true );

     }

     /**

     * 文本解码

     * 

     * @param encodeText 解码MimeUtility.encodeText(String text)方法编码后的文本

     * @return 解码后的文本

     * @throws UnsupportedEncodingException

     */

     public   String decodeText(String encodeText) throws UnsupportedEncodingException {

         if (encodeText == null || "" .equals(encodeText)) {

             return "" ;

         } else {

             return MimeUtility.decodeText(encodeText);

         }

     }

}

POP3协议接收邮件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467

468

469

470

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Properties;

 

import javax.mail.Address;

import javax.mail.BodyPart;

import javax.mail.Flags;

import javax.mail.Folder;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.Part;

import javax.mail.Session;

import javax.mail.Store;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

 

import com.sun.mail.util.MailSSLSocketFactory;

 

/**

  * 使用POP3协议接收邮件

  */

public class POP3ReceiveMail {

     private String user = "" ; //账号

     private String password = "" ; //密码

//    private Properties props = null;

     private Folder folder = null ; //收件箱

     private Store store  = null ; //实例对象

     final String pop3 = "pop3" ;

//    final String imap = "imap";

     public POP3ReceiveMail(String user,String password) {

         this .password = password; //密码

         this .user = user; //账户

     }

     /**

     * 接收邮件

     */

     public   Folder resceive() throws Exception {

         /**

         * 因为现在使用的是163邮箱 而163的 pop地址是 pop3.163.com 端口是 110 比如使用好未来企业邮箱 就需要换成 好未来邮箱的

         * pop服务器地址 pop.263.net 和 端口 110

         */

        

         String duankou = "" ; // 端口号

         String servicePath = "" ; // 服务器地址

         if (user== null ||user.length()== 0 ) throw new EmailException( "账户不能为空!!!!" );

         if (password== null ||password.length()== 0 ) throw new EmailException( "密码不能为空!!!!" );

         if (user.contains( "@163" )) {

             duankou = "110" ; // 端口号

             servicePath = "pop3.163.com" ; // 服务器地址

         } else if (user.contains( "@qq" )) {

             duankou = "995" ; // 端口号

             servicePath = "pop.qq.com" ; // 服务器地址

         } else {

             throw new EmailException( "不支持该协议" );

         }

        

 

         // 准备连接服务器的会话信息

         Properties props = new Properties();

         props.setProperty( "mail.store.protocol" , pop3); // 使用pop3协议

 

//        props.setProperty("mail.transport.protocol", pop3); // 使用pop3协议

         props.setProperty( "mail.pop3.port" , duankou); // 端口

         props.setProperty( "mail.pop3.host" , servicePath); // pop3服务器

         props.setProperty( "mail.pop3.socketFactory.fallback" , "true" );

        

         MailSSLSocketFactory sf = new MailSSLSocketFactory(); //ssl加密

        sf.setTrustAllHosts( true );

        props.put( "mail.pop3.ssl.enable" , "true" );

        props.put( "mail.pop3.ssl.socketFactory" , sf);

        

//        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 

//      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

//        props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);

         // 创建Session实例对象

         Session session = Session.getInstance(props);

         store = session.getStore(pop3);

         store.connect(servicePath,user,password); // 163邮箱程序登录属于第三方登录所以这里的密码是163给的授权密码而并非普通的登录密码

         // 获得收件箱

         folder = store.getFolder( "INBOX" );

         /*

         * Folder.READ_ONLY:只读权限 Folder.READ_WRITE:可读可写(可以修改邮件的状态)

         */

//        folder.open(Folder.READ_WRITE); // 打开收件箱

         folder.open(Folder.READ_WRITE); // 打开收件箱

         // 由于POP3协议无法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数

//        System.out.println("未读邮件数: " + folder.getUnreadMessageCount());

         // 由于POP3协议无法获知邮件的状态,所以下面得到的结果始终都是为0

//        System.out.println("删除邮件数: " + folder.getDeletedMessageCount());

//        System.out.println("新邮件: " + folder.getNewMessageCount());

         // 获得收件箱中的邮件总数

//        System.out.println("邮件总数: " + folder.getMessageCount());

         // 得到收件箱中的所有邮件,并解析

//        Message[] messages = folder.getMessages();

//        parseMessage(messages);

         // 得到收件箱中的所有邮件并且删除邮件

//        deleteMessage(messages);

 

         // 释放资源

//        folder.close(true);

//        store.close();

         return folder;

     }

     public void Colsefolder() throws MessagingException { //关闭资源

         if (folder!= null ) {

             folder.close();

         }

         if (store!= null ) {

             store.close();

         }

     }

     /**

     * 解析邮件

     * 

     * @param messages 要解析的邮件列表

     */

     public   void parseMessage(Message... messages) throws MessagingException, IOException {

         if (messages == null || messages.length < 1 )

             throw new MessagingException( "未找到要解析的邮件!" );

         // 解析所有邮件

         for ( int i = 0 , count = messages.length; i < count; i++) {

             MimeMessage msg = (MimeMessage) messages[i];

             System.out.println( "------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- " );

             System.out.println( "主题: " + getSubject(msg));

             System.out.println( "发件人: " + getFrom(msg));

             System.out.println( "收件人:" + getReceiveAddress(msg, null ));

             System.out.println( "发送时间:" + getSentDate(msg, null ));

             System.out.println( "是否已读:" + isSeen(msg));

             System.out.println( "邮件优先级:" + getPriority(msg));

             System.out.println( "是否需要回执:" + isReplySign(msg));

             System.out.println( "邮件大小:" + msg.getSize() * 1024 + "kb" );

             boolean isContainerAttachment = isContainAttachment(msg);

             System.out.println( "是否包含附件:" + isContainerAttachment);

             if (isContainerAttachment) {

                 saveAttachment(msg, "f:\\mailTest\\" + msg.getSubject() + "_" + i + "_" ); // 保存附件

             }

             StringBuffer content = new StringBuffer( 30 );

             getMailTextContent(msg, content);

             System.out.println( "邮件正文:" + (content.length() > 100 ? content.substring( 0 , 100 ) + "..." : content));

             System.out.println( "------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- " );

             System.out.println();

         }

     }

 

     /**

     * 解析邮件

     * 

     * @param messages 要解析的邮件列表

     */

     public   void deleteMessage(Message... messages) throws MessagingException, IOException {

         if (messages == null || messages.length < 1 )

             throw new MessagingException( "未找到要解析的邮件!" );

 

         // 解析所有邮件

         for ( int i = 0 , count = messages.length; i < count; i++) {

 

             /**

             * 邮件删除

             */

             Message message = messages[i];

             String subject = message.getSubject();

             // set the DELETE flag to true

             message.setFlag(Flags.Flag.DELETED, true );

             System.out.println( "Marked DELETE for message: " + subject);

 

         }

     }

 

     /**

     * 获得邮件主题

     * 

     * @param msg 邮件内容

     * @return 解码后的邮件主题

     */

     public   String getSubject(MimeMessage msg) throws UnsupportedEncodingException, MessagingException {

         return MimeUtility.decodeText(msg.getSubject());

     }

 

     /**

     * 获得邮件发件人

     * 

     * @param msg 邮件内容

     * @return 姓名 <Email地址>

     * @throws MessagingException

     * @throws UnsupportedEncodingException

     */

     public   String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {

         String from = "" ;

         Address[] froms = msg.getFrom();

         if (froms.length < 1 )

             throw new MessagingException( "没有发件人!" );

 

         InternetAddress address = (InternetAddress) froms[ 0 ];

         String person = address.getPersonal();

         if (person != null ) {

             person = MimeUtility.decodeText(person) + " " ;

         } else {

             person = "" ;

         }

         from = person + "<" + address.getAddress() + ">" ;

 

         return from;

     }

 

     public   String getFromAddress(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {

         String from = "" ;

         Address[] froms = msg.getFrom();

         if (froms.length < 1 )

             throw new MessagingException( "没有发件人!" );

 

         InternetAddress address = (InternetAddress) froms[ 0 ];

         from = address.getAddress();

 

         return from;

     }

     /**

     * 根据收件人类型,获取邮件收件人、抄送和密送地址。如果收件人类型为空,则获得所有的收件人

     * <p>

     * Message.RecipientType.TO 收件人

     * </p>

     * <p>

     * Message.RecipientType.CC 抄送

     * </p>

     * <p>

     * Message.RecipientType.BCC 密送

     * </p>

     * 

     * @param msg  邮件内容

     * @param type 收件人类型

     * @return 收件人1 <邮件地址1>, 收件人2 <邮件地址2>, ...

     * @throws MessagingException

     */

     public   String getReceiveAddress(MimeMessage msg, Message.RecipientType type) throws MessagingException {

         StringBuffer receiveAddress = new StringBuffer();

         Address[] addresss = null ;

         if (type == null ) {

             addresss = msg.getAllRecipients();

         } else {

             addresss = msg.getRecipients(type);

         }

 

         if (addresss == null || addresss.length < 1 )

             throw new MessagingException( "没有收件人!" );

         for (Address address : addresss) {

             InternetAddress internetAddress = (InternetAddress) address;

             receiveAddress.append(internetAddress.toUnicodeString()).append( "," );

         }

 

         receiveAddress.deleteCharAt(receiveAddress.length() - 1 ); // 删除最后一个逗号

 

         return receiveAddress.toString();

     }

 

     /**

     * 获得邮件发送时间

     * 

     * @param msg 邮件内容

     * @return yyyy年mm月dd日 星期X HH:mm

     * @throws MessagingException

     */

     public   String getSentDate(MimeMessage msg, String pattern) throws MessagingException {

         Date receivedDate = msg.getSentDate();

         if (receivedDate == null )

             return "" ;

 

         if (pattern == null || "" .equals(pattern))

             pattern = "yyyy年MM月dd日 E HH:mm " ;

 

         return new SimpleDateFormat(pattern).format(receivedDate);

     }

 

     /**

     * 判断邮件中是否包含附件

     * 

     * @param msg 邮件内容

     * @return 邮件中存在附件返回true,不存在返回false

     * @throws MessagingException

     * @throws IOException

     */

     public   boolean isContainAttachment(Part part) throws MessagingException, IOException {

         boolean flag = false ;

         if (part.isMimeType( "multipart/*" )) {

             MimeMultipart multipart = (MimeMultipart) part.getContent();

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 String disp = bodyPart.getDisposition();

                 if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {

                     flag = true ;

                 } else if (bodyPart.isMimeType( "multipart/*" )) {

                     flag = isContainAttachment(bodyPart);

                 } else {

                     String contentType = bodyPart.getContentType();

                     if (contentType.indexOf( "application" ) != - 1 ) {

                         flag = true ;

                     }

 

                     if (contentType.indexOf( "name" ) != - 1 ) {

                         flag = true ;

                     }

                 }

 

                 if (flag)

                     break ;

             }

         } else if (part.isMimeType( "message/rfc822" )) {

             flag = isContainAttachment((Part) part.getContent());

         }

         return flag;

     }

 

     /**

     * 判断邮件是否已读

     * 

     * @param msg 邮件内容

     * @return 如果邮件已读返回true,否则返回false

     * @throws MessagingException

     */

     public   boolean isSeen(MimeMessage msg) throws MessagingException {

         return msg.getFlags().contains(Flags.Flag.SEEN);

     }

 

     /**

     * 判断邮件是否需要阅读回执

     * 

     * @param msg 邮件内容

     * @return 需要回执返回true,否则返回false

     * @throws MessagingException

     */

     public   boolean isReplySign(MimeMessage msg) throws MessagingException {

         boolean replySign = false ;

         String[] headers = msg.getHeader( "Disposition-Notification-To" );

         if (headers != null )

             replySign = true ;

         return replySign;

     }

 

     /**

     * 获得邮件的优先级

     * 

     * @param msg 邮件内容

     * @return 1(High):紧急 3:普通(Normal) 5:低(Low)

     * @throws MessagingException

     */

     public   String getPriority(MimeMessage msg) throws MessagingException {

         String priority = "普通" ;

         String[] headers = msg.getHeader( "X-Priority" );

         if (headers != null ) {

             String headerPriority = headers[ 0 ];

             if (headerPriority.indexOf( "1" ) != - 1 || headerPriority.indexOf( "High" ) != - 1 )

                 priority = "紧急" ;

             else if (headerPriority.indexOf( "5" ) != - 1 || headerPriority.indexOf( "Low" ) != - 1 )

                 priority = "低" ;

             else

                 priority = "普通" ;

         }

         return priority;

     }

 

     /**

     * 获得邮件文本内容

     * 

     * @param part    邮件体

     * @param content 存储邮件文本内容的字符串

     * @throws MessagingException

     * @throws IOException

     */

     public   void getMailTextContent(Part part, StringBuffer content) throws MessagingException, IOException {

         // 如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断

         boolean isContainTextAttach = part.getContentType().indexOf( "name" ) > 0 ;

         if (part.isMimeType( "text/*" ) && !isContainTextAttach) {

             content.append(part.getContent().toString());

         } else if (part.isMimeType( "message/rfc822" )) {

             getMailTextContent((Part) part.getContent(), content);

         } else if (part.isMimeType( "multipart/*" )) {

             Multipart multipart = (Multipart) part.getContent();

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 getMailTextContent(bodyPart, content);

             }

         }

     }

 

     /**

     * 保存附件

     * 

     * @param part    邮件中多个组合体中的其中一个组合体

     * @param destDir 附件保存目录

     * @throws UnsupportedEncodingException

     * @throws MessagingException

     * @throws FileNotFoundException

     * @throws IOException

     */

     public   void saveAttachment(Part part, String destDir)

             throws UnsupportedEncodingException, MessagingException, FileNotFoundException, IOException {

         if (part.isMimeType( "multipart/*" )) {

             Multipart multipart = (Multipart) part.getContent(); // 复杂体邮件

             // 复杂体邮件包含多个邮件体

             int partCount = multipart.getCount();

             for ( int i = 0 ; i < partCount; i++) {

                 // 获得复杂体邮件中其中一个邮件体

                 BodyPart bodyPart = multipart.getBodyPart(i);

                 // 某一个邮件体也有可能是由多个邮件体组成的复杂体

                 String disp = bodyPart.getDisposition();

                 if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {

                     InputStream is = bodyPart.getInputStream();

                     saveFile(is, destDir, decodeText(bodyPart.getFileName()));

                 } else if (bodyPart.isMimeType( "multipart/*" )) {

                     saveAttachment(bodyPart, destDir);

                 } else {

                     String contentType = bodyPart.getContentType();

                     if (contentType.indexOf( "name" ) != - 1 || contentType.indexOf( "application" ) != - 1 ) {

                         saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName()));

                     }

                 }

             }

         } else if (part.isMimeType( "message/rfc822" )) {

             saveAttachment((Part) part.getContent(), destDir);

         }

     }

 

     /**

     * 读取输入流中的数据保存至指定目录

     * 

     * @param is       输入流

     * @param fileName 文件名

     * @param destDir  文件存储目录

     * @throws FileNotFoundException

     * @throws IOException

     */

     private   void saveFile(InputStream is, String destDir, String fileName)

             throws FileNotFoundException, IOException {

         BufferedInputStream bis = new BufferedInputStream(is);

         BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( new File(destDir + fileName)));

         int len = - 1 ;

         while ((len = bis.read()) != - 1 ) {

             bos.write(len);

             bos.flush();

         }

         bos.close();

         bis.close();

     }

 

     /**

     * 文本解码

     * 

     * @param encodeText 解码MimeUtility.encodeText(String text)方法编码后的文本

     * @return 解码后的文本

     * @throws UnsupportedEncodingException

     */

     public   String decodeText(String encodeText) throws UnsupportedEncodingException {

         if (encodeText == null || "" .equals(encodeText)) {

             return "" ;

         } else {

             return MimeUtility.decodeText(encodeText);

         }

     }

}

发送邮件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.security.GeneralSecurityException;

import java.util.Date;

import java.util.Properties;

import java.util.UUID;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

 

import com.sun.mail.util.MailSSLSocketFactory;

 

/*

  * 发送邮件

  */

public class SendMailUtil {

     private   String HOST = "" ; // smtp服务器

     private String FROM = "" ; // 发件人地址

//    private String TO = ""; // 收件人地址

     private String[] AFFIX = null ; // 附件地址

//    private String AFFIXNAME = ""; // 附件名称

    private String USER = "" ; // 用户名

    private String PWD = "" ; // 163的授权码

//    private String SUBJECT = ""; // 邮件标题

    private String[] TOS = null ;

    private   Properties props = null ; //

    /**

      * @param USER 账户名

      * @param PWD    密码

      * @param FROM 发件人地址

      * @throws EmailException 

      * @throws GeneralSecurityException 

      */

    public SendMailUtil(String USER,String PWD,String FROM) throws EmailException, GeneralSecurityException {

         this .USER = USER; //账户

         this .PWD = PWD; //密码

         this .FROM = FROM; //发件人地址

         stratProperties();

        

    }

    private void stratProperties() throws EmailException, GeneralSecurityException {

         props = new Properties();

          if (USER== null ||USER.length()== 0 ) {

              throw new EmailException( "邮箱账号不能为空" );    

          } else {

              if (USER.contains( "@qq" )) {

                  HOST = "smtp.qq.com" ;

              } else if (USER.contains( "@163" )) {

                  HOST = "smtp.163.com" ;

              } else if (USER.contains( "@sina" )) {

                  HOST = "smtp.sina.com.cn" ;

              } else {

                  throw new EmailException( "不支持该协议" );

              }

//             props.setProperty("mail.smtp.host", HOST);//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)

              // 设置邮件服务器主机名

              props.setProperty( "mail.host" , HOST);

             

          }

          if (PWD== null ||PWD.length()== 0 ) throw new EmailException( "邮箱密码不能为空" );

          props.setProperty( "mail.transport.protocol" , "smtp" ); // 发送邮件协议名称

          props.setProperty( "mail.smtp.auth" , "true" );   //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)

//         props.put("mail.debug", "true");//设置debug模式 后台输出邮件发送的过程

         

          MailSSLSocketFactory sf = new MailSSLSocketFactory(); //ssl加密

          sf.setTrustAllHosts( true );

          props.put( "mail.smtp.ssl.enable" , "true" );

          props.put( "mail.smtp.ssl.socketFactory" , sf);

    }

    

    public void forwardMail(Message message) throws AddressException, MessagingException, EmailException, IOException {

         if (TOS.length== 0 ) throw new EmailException( "收件人不能为空" );

         Session session = Session.getInstance(props); //用props对象构建一个session

//         session.setDebug(true);//关闭控制台输出

          MimeMessage newmessage = new MimeMessage(session); //用session为参数定义消息对象

          newmessage.setSubject(message.getSubject());

             newmessage.setFrom( new InternetAddress(FROM));

           newmessage.setSentDate( new Date());

          newmessage.setContent(message.getContent(), message.getContentType());

          InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址

          for ( int i = 0 ; i < TOS.length; i++) {  

              sendTo[i] = new InternetAddress(TOS[i]);  

          }

        newmessage.addRecipients(Message.RecipientType.TO,sendTo);

        newmessage.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM)); //设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错

        Transport smtp = session.getTransport( "smtp" );

        smtp.connect(HOST, USER, PWD);

        smtp.sendMessage(newmessage, newmessage.getAllRecipients());

        smtp.close();

    }

    /**

      * @param path 需要添加附件的文件路径

      * @throws EmailException 

      */

    public void addFile(String...path) throws EmailException {

         if (path== null ||path.length== 0 ) throw new EmailException( "附件路径不能为空" );    

         this .AFFIX = path;

    }

    public void setTo(String...to) throws EmailException {

         if (toString().length()> 0 ) {

             for (String t : to) {

                 boolean emailFormat = emailFormat(t);

                 if (!emailFormat) {

                     throw new EmailException(t+ "邮箱格式不正确" );    

                 }

             }

             TOS = to;

         } else {

             throw new EmailException( "收件人不能为空" );    

         }

    }

   

    /**

      ** 验证输入的邮箱格式是否符合

      * @param email

      * @return 是否合法

      */

    private   boolean emailFormat(String email)

    {

        boolean tag = true ;

        final String pattern1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$" ;

        final Pattern pattern = Pattern.compile(pattern1);

        final Matcher mat = pattern.matcher(email);

        if (!mat.find()) {

            tag = false ;

        }

        return tag;

    }

    /**

      * @param SUBJECT 标题

      * @param context 文本信息

      * @throws EmailException

      * @throws MessagingException 

      * @throws AddressException 

      * @throws GeneralSecurityException 

      * @throws UnsupportedEncodingException 

      */

    public   void send(String SUBJECT,String context) throws EmailException, AddressException, MessagingException, GeneralSecurityException, UnsupportedEncodingException {

        

         if (SUBJECT== null ||SUBJECT.length()== 0 )SUBJECT=UUID.randomUUID().toString();

//        this.SUBJECT = SUBJECT;//标题

         if (TOS.length== 0 ) throw new EmailException( "收件人不能为空" );

         Session session = Session.getInstance(props); //用props对象构建一个session

//        session.setDebug(true);//关闭控制台输出

         MimeMessage message = new MimeMessage(session); //用session为参数定义消息对象

         message.setFrom( new InternetAddress(FROM)); // 加载发件人地址

         InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址

         for ( int i = 0 ; i < TOS.length; i++) {  

            sendTo[i] = new InternetAddress(TOS[i]);  

        }

         message.addRecipients(Message.RecipientType.TO,sendTo);

         message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM)); //设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错

         message.setSubject(SUBJECT); //加载标题

         Multipart multipart = new MimeMultipart(); //向multipart对象中添加邮件的各个部分内容,包括文本内容和附件

         BodyPart contentPart = new MimeBodyPart(); //设置邮件的文本内容

        contentPart.setText(context);

        multipart.addBodyPart(contentPart);

        if (AFFIX!= null &&AFFIX.length> 0 ){ //添加附件

             for ( int i = 0 ; i <AFFIX.length ; i++) {

                 File file = new File(AFFIX[i]);

                 if (file.exists()) {

                     BodyPart messageBodyPart = new MimeBodyPart();

                     FileDataSource source = new FileDataSource(file);

//                     String AFFIXNAME = file.getName();

//                     System.out.println(AFFIXNAME);

                      messageBodyPart.setDataHandler( new DataHandler(source)); //添加附件的内容

                      messageBodyPart.setFileName(MimeUtility.encodeWord(file.getName(), "GBK" , null ));

                      multipart.addBodyPart(messageBodyPart);

                 } else {

                     throw new EmailException( "文件" +AFFIX[i]+ "不存在" );

                 }

             }

            

        }

        message.setContent(multipart); //将multipart对象放到message中

        message.saveChanges(); //保存邮件

        Transport transport = session.getTransport(); //发送邮件

        transport.connect(HOST, USER, PWD); //连接服务器的邮箱

        transport.sendMessage(message, message.getAllRecipients()); //把邮件发送出去

        transport.close(); //关闭连接

    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://laiwei.blog.csdn.net/article/details/109709703

查看更多关于java实现简单发送邮件功能的详细内容...

  阅读:11次