社区
Java EE
帖子详情
javamail中getContentType()问题
alarmray
2003-08-23 10:01:03
我想读一封信件的正文内容和附件名,程序在命令行运行是可以的,但打包到ejb中在jsp页面中调用就不行了。一开始以为是ejb的问题,后来写成bean在页面中调用也是不行,debug发现那条message的ContentType为空,可能是在网页中message的内容没传过来。请问该怎么解决?求救
...全文
190
3
打赏
收藏
javamail中getContentType()问题
我想读一封信件的正文内容和附件名,程序在命令行运行是可以的,但打包到ejb中在jsp页面中调用就不行了。一开始以为是ejb的问题,后来写成bean在页面中调用也是不行,debug发现那条message的ContentType为空,可能是在网页中message的内容没传过来。请问该怎么解决?求救
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
alarmray
2003-08-23
打赏
举报
回复
再加500分,求教各位
alarmray
2003-08-23
打赏
举报
回复
ContentType是根据内容自动决定的吧。 我怎么没找到有setContentType()函数? text/html text/plain是一般的信件不带附件的
hessian
2003-08-23
打赏
举报
回复
可以用函数setContentType(String)设置,一般为"text/html"或"text/plain".
Java邮件开发Fundamentals of the
JavaMail
API
Fundamentals of the
JavaMail
API Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Table of
Cont
ents If you're viewing this document online, you can click any of the topics below to link directly to that section. 1. Tutorial tips 2 2. Introducing the
JavaMail
API 3 3. Reviewing related protocols 4 4. Installing
JavaMail
6 5. Reviewing the core classes 8 6. Using the
JavaMail
API 13 7. Searching with SearchTerm 21 8. Exercises 22 9. Wrapup 32 Fundamentals of the
JavaMail
API Page 1 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 1. Tutorial tips Should I take this tutorial? Looking to incorporate mail facilities into your platform-inde
pe
ndent Java solutions? Look no further than the
JavaMail
API, which offers a protocol-inde
pe
ndent model for working with IMAP, POP, SMTP, MIME, and all those other Internet-related messaging protocols. With the help of the JavaBeans Activation Framework (JAF), your applications can now be mail-enabled through the
JavaMail
API. Concepts After completing this module you will understand the: * Basics of the Internet mail protocols SMTP, POP3, IMAP, and MIME * Architecture of the
JavaMail
framework * Connections between the
JavaMail
API and the JavaBeans Activation Framework Objectives By the end of this module you will be able to: * Send and read mail using the
JavaMail
API * Deal with sending and receiving attachments * Work with HTML messages * Use search terms to search for messages Prerequisites Instructions on how to download and install the
JavaMail
API are
cont
ained in the course. In addition, you will need a development environment such as the JDK 1.1.6+ or the Java 2 Platform, Standard Edition (J2SE) 1.2.x or 1.3.x. A general familiarity with object-oriented programming concepts and the Java programming language is necessary. The Java language essentials tutorial can help. copyright 1996-2000 Magelang Institute dba jGuru
Cont
act jGuru has been dedicated to promoting the growth of the Java technology community through evangelism, education, and software since 1995. You can find out more about their activities, including their huge collection of FAQs at jGuru.com . To send feedback to jGuru about this course, send mail to producer@jguru.com . Course author: Formerly with jGuru.com , John Zukowski does strategic Java consulting for JZ Ventures, Inc. His latest book is titled Java Collections from Apress . Fundamentals of the
JavaMail
API Page 2 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 2. Introducing the
JavaMail
API What is the
JavaMail
API? The
JavaMail
API is an optional package (standard extension) for reading, composing, and sending electronic messages. You use the package to create Mail User Agent (MUA) ty
pe
programs, similar to Eudora, pine, and Microsoft Outlook. The API's main purpose is not for transporting, delivering, and forwarding messages; this is the purview of applications such as sendmail and other Mail Transfer Agent (MTA) ty
pe
programs. MUA-ty
pe
programs let users read and write e-mail, whereas MUAs rely on MTAs to handle the actual delivery. The
JavaMail
API is designed to provide protocol-inde
pe
ndent access for sending and receiving messages by dividing the API into two parts: * The first part of the API is the focus of this course --basically, how to send and receive messages inde
pe
ndent of the provider/protocol. * The second part s
pe
aks the protocol-s
pe
cific languages, like SMTP, POP, IMAP, and NNTP. With the
JavaMail
API, in order to communicate with a server, you need a provider for a protocol. The creation of protocol-s
pe
cific providers is not covered in this course because Sun provides a sufficient set for free. Fundamentals of the
JavaMail
API Page 3 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 3. Reviewing related protocols Introduction Before looking into the
JavaMail
API s
pe
cifics, let's step back and take a look at the protocols used with the API. There are basically four that you'll come to know and love: * SMTP * POP * IMAP * MIME You will also run across NNTP and some others. Understanding the basics of all the protocols will help you understand how to use the
JavaMail
API. While the API is designed to be protocol agnostic, you can't overcome the limitations of the underlying protocols. If a capability isn't supported by a chosen protocol, the
JavaMail
API doesn't magically add the capability on top of it. (As you'll soon see, this can be a problem when working with POP.) SMTP The Simple Mail Transfer Protocol (SMTP) is defined by RFC 821 . It defines the mechanism for delivery of e-mail. In the
cont
ext of the
JavaMail
API, your
JavaMail
-based program will communicate with your company or Internet Service Provider's (ISP's) SMTP server. That SMTP server will relay the message on to the SMTP server of the recipient(s) to eventually be acquired by the user(s) through POP or IMAP. This does not require your SMTP server to be an o
pe
n relay, as authentication is supported, but it is your responsibility to ensure the SMTP server is configured pro
pe
rly. There is nothing in the
JavaMail
API for tasks like configuring a server to relay messages or to add and remove e-mail accounts. POP POP stands for Post Office Protocol. Currently in version 3, also known as POP3, RFC 1939 defines this protocol. POP is the mechanism most
pe
ople on the Internet use to get their mail. It defines support for a single mailbox for each user. That is all it does, and that is also the source of a lot of confusion. Much of what
pe
ople are familiar with when using POP, like the ability to see how many new mail messages they have, are not supported by POP at all. These capabilities are built into programs like Eudora or Microsoft Outlook, which remember things like the last mail received and calculate how many are new for you. So, when using the
JavaMail
API, if you want this ty
pe
of information, you have to calculate it yourself. IMAP IMAP is a more advanced protocol for receiving messages. Defined in RFC 2060 , IMAP stands for Internet Message Access Protocol, and is currently in version 4, also known as IMAP4. When using IMAP, your mail server must support the protocol. You can't just change your program to use IMAP instead of POP and ex
pe
ct everything in IMAP to be supported. Assuming your mail server supports IMAP, your
JavaMail
-based program can take Fundamentals of the
JavaMail
API Page 4 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks advantage of users having multiple folders on the server and these folders can be shared by multiple users. Due to the more advanced capabilities, you might think IMAP would be used by everyone. It isn't. It places a much heavier burden on the mail server, requiring the server to receive the new messages, deliver them to users when requested, and maintain them in multiple folders for each user. While this does centralize backups, as users' long-term mail folders get larger and larger, everyone suffers when disk space is exhausted. With POP, saved messages get offloaded from the mail server. MIME MIME stands for Multipurpose Internet Mail Extensions. It is not a mail transfer protocol. Instead, it defines the
cont
ent of what is transferred: the format of the messages, attachments, and so on. There are many different documents that take effect here: RFC 822 , RFC 2045 , RFC 2046 , and RFC 2047 . As a user of the
JavaMail
API, you usually don't need to worry about these formats. However, these formats do exist and are used by your programs. NNTP and others Because of the split of the
JavaMail
API between provider and everything else, you can easily add support for additional protocols. Sun maintains a list of third-party providers that take advantage of protocols for which Sun does not provide out-of-the-box support. You'll find support for NNTP (Network News Transport Protocol) [newsgroups], S/MIME (Secure Multipurpose Internet Mail Extensions), and more. Fundamentals of the
JavaMail
API Page 5 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 4. Installing
JavaMail
Introduction There are two versions of the
JavaMail
API commonly used today: 1.2 and 1.1.3. All the examples in this course will work with both. While 1.2 is the latest, 1.1.3 is the version included with the 1.2.1 version of the Java 2 Platform, Enterprise Edition (J2EE), so it is still commonly used. The version of the
JavaMail
API you want to use affects what you download and install. All will work with JDK 1.1.6+, Java 2 Platform, Standard Edition (J2SE) version 1.2.x, and J2SE version 1.3.x. Note: After installing Sun's
JavaMail
implementation, you can find many example programs in the demo directory. Installing
JavaMail
1.2 To use the
JavaMail
1.2 API, download the
JavaMail
1.2 implementation, unbundle the
javamail
-1_2.zip file, and add the mail.jar file to your CLASSPATH. The 1.2 implementation comes with an SMTP, IMAP4, and POP3 provider besides the core classes. After installing
JavaMail
1.2, install the JavaBeans Activation Framework. Installing
JavaMail
1.1.3 To use the
JavaMail
1.1.3 API, download the
JavaMail
1.1.3 implementation, unbundle the
javamail
1_1_3.zip file, and add the mail.jar file to your CLASSPATH. The 1.1.3 implementation comes with an SMTP and IMAP4 provider, besides the core classes. If you want to access a POP server with
JavaMail
1.1.3, download and install a POP3 provider. Sun has one available separate from the
JavaMail
implementation. After downloading and unbundling pop31_1_1.zip, add pop3.jar to your CLASSPATH, too. After installing
JavaMail
1.1.3, install the JavaBeans Activation Framework. Installing the JavaBeans Activation Framework All versions of the
JavaMail
API require the JavaBeans Activation Framework. The framework adds support for typing arbitrary blocks of data and handling it accordingly. This doesn't sound like much, but it is your basic MIME-ty
pe
support found in many browsers and mail tools today. After downloading the framework, unbundle the jaf1_0_1.zip file, and add the activation.jar file to your CLASSPATH. For
JavaMail
1.2 users, you should now have added mail.jar and activation.jar to your CLASSPATH. For
JavaMail
1.1.3 users, you should now have added mail.jar, pop3.jar, and activation.jar to your CLASSPATH. If you have no plans of using POP3, you don't Fundamentals of the
JavaMail
API Page 6 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks need to add pop3.jar to your CLASSPATH. If you don't want to change the CLASSPATH environment variable, copy the jar files to your lib/ext directory under the Java Runtime Environment (JRE) directory. For instance, for the J2SE 1.3 release, the default directory would be C:\jdk1.3\jre\lib\ext on a Windows platform. Using
JavaMail
with the Java 2 Enterprise Edition If you use J2EE, there is nothing s
pe
cial you have to do to use the basic
JavaMail
API; it comes with the J2EE classes. Just make sure the j2ee.jar file is in your CLASSPATH and you're all set. For J2EE 1.2.1, the POP3 provider comes separately, so download and follow the steps to include the POP3 provider as shown in the previous section "Installing
JavaMail
1.1.3." J2EE 1.3 users get the POP3 provider with J2EE so do not require the separate installation. Neither installation requires you to install the JavaBeans Activation Framework. Exercise Exercise 1. How to set up a
JavaMail
environment on page 22 Fundamentals of the
JavaMail
API Page 7 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 5. Reviewing the core classes Introduction Before taking a how-to approach at looking at the
JavaMail
classes in depth, this section walks you through the core classes that make up the API: Session, Message, Address, Authenticator, Transport, Store, and Folder. All these classes are found in the top-level package for the
JavaMail
API, javax.mail, though you'll frequently find yourself using subclasses found in the javax.mail.internet package. Session The Session class defines a basic mail session. It is through this session that everything else works. The Session object takes advantage of a java.util.Pro
pe
rties object to get information like mail server, username, password, and other information that can be shared across your entire application. The constructors for the class are private. You can get a single default session that can be shared with the getDefaultInstance() method: Pro
pe
rties props = new Pro
pe
rties(); // fill props with any information Session session = Session.getDefaultInstance(props, null); Or, you can create a unique session with getInstance(): Pro
pe
rties props = new Pro
pe
rties(); // fill props with any information Session session = Session.getDefaultInstance(props, null); In both cases, the null argument is an Authenticator object that is not being used at this time. In most cases, it is sufficient to use the shared session, even if working with mail sessions for multiple user mailboxes. You can add the username and password combination in at a later step in the communication process, keeping everything separate. Message Once you have your Session object, it is time to move on to creating the message to send. This is done with a ty
pe
of Message . Because Message is an abstract class, you must work with a subclass, in most cases javax.mail.internet.MimeMessage .A MimeMessage is an e-mail message that understands MIME ty
pe
s and headers, as defined in the different RFCs. Message headers are restricted to US-ASCII characters only, though non-ASCII characters can be encoded in certain header fields. To create a Message, pass along the Session object to the MimeMessage constructor: MimeMessage message = new MimeMessage(session); Fundamentals of the
JavaMail
API Page 8 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Note: There are other constructors, like for creating messages from RFC822-formatted input streams. Once you have your message, you can set its parts, as Message implements the Part interface (with MimeMessage implementing MimePart ). The basic mechanism to set the
cont
ent is the set
Cont
ent() method, with arguments for the
cont
ent and the mime ty
pe
: message.set
Cont
ent("Hello", "text/plain"); If, however, you know you are working with a MimeMessage and your message is plain text, you can use its setText() method, which only requires the actual
cont
ent, defaulting to the MIME ty
pe
of text/plain: message.setText("Hello"); For plain text messages, the latter form is the preferred mechanism to set the
cont
ent. For sending other kinds of messages, like HTML messages, use the former. For setting the subject, use the setSubject() method: message.setSubject("First"); Address Once you've created the Session and the Message, as well as filled the message with
cont
ent, it is time to address your letter with an Address . Like Message, Address is an abstract class. You use the javax.mail.internet.InternetAddress class. To create an address with just the e-mail address, pass the e-mail address to the constructor: Address address = new InternetAddress("president@whitehouse.gov"); If you want a name to ap
pe
ar next to the e-mail address, you can pass that along to the constructor, too: Address address = new InternetAddress("president@whitehouse.gov", "George Bush"); You will need to create address objects for the message's from field as well as the to field. Unless your mail server prevents you, there is nothing stopping you from sending a message that ap
pe
ars to be from anyone. Once you've created the addresses, you connect them to a message in one of two ways. For identifying the sender, you use the setFrom() and setReplyTo() methods. message.setFrom(address) If your message needs to show multiple from addresses, use the addFrom() method: Fundamentals of the
JavaMail
API Page 9 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Address address[] = ...; message.addFrom(address); For identifying the message recipients, you use the addRecipient() method. This method requires a Message.Recipi
entTy
pe
besides the address. message.addRecipient(ty
pe
, address) The three predefined ty
pe
s of address are: * Message.Recipi
entTy
pe
.TO * Message.Recipi
entTy
pe
.CC * Message.Recipi
entTy
pe
.BCC So, if the message was to go to the vice president, sending a carbon copy to the first lady, the following would be appropriate: Address toAddress = new InternetAddress("vice.president@whitehouse.gov"); Address ccAddress = new InternetAddress("first.lady@whitehouse.gov"); message.addRecipient(Message.Recipi
entTy
pe
.TO, toAddress); message.addRecipient(Message.Recipi
entTy
pe
.CC, ccAddress); The
JavaMail
API provides no mechanism to check for the validity of an e-mail address. While you can program in support to scan for valid characters (as defined by RFC 822) or verify the MX (mail exchange) record yourself, these are all beyond the sco
pe
of the
JavaMail
API. Authenticator Like the java.net classes, the
JavaMail
API can take advantage of an Authenticator to access protected resources via a username and password. For the
JavaMail
API, that resource is the mail server. The
JavaMail
Authenticator is found in the javax.mail package and is different from the java.net class of the same name. The two don't share the same Authenticator as the
JavaMail
API works with Java 1.1, which didn't have the java.net variety. To use the Authenticator, you subclass the abstract class and return a PasswordAuthentication instance from the getPasswordAuthentication() method. You must register the Authenticator with the session when created. Then, your Authenticator will be notified when authentication is necessary. You could pop up a window or read the username and password from a configuration file (though if not encrypted is not secure), returning them to the caller as a PasswordAuthentication object. Pro
pe
rties props = new Pro
pe
rties(); // fill props with any information Authenticator auth = new MyAuthenticator(); Session session = Session.getDefaultInstance(props, auth); Transport The final part of sending a message is to use the Transport class. This class s
pe
aks the Fundamentals of the
JavaMail
API Page 10 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks protocol-s
pe
cific language for sending the message (usually SMTP). It's an abstract class and works something like Session. You can use the default version of the class by just calling the static send() method: Transport.send(message); Or, you can get a s
pe
cific instance from the session for your protocol, pass along the username and password (blank if unnecessary), send the message, and close the connection: message.saveChanges(); // implicit with send() Transport transport = session.getTransport("smtp"); transport.connect(host, username, password); transport.sendMessage(message, message.getAllRecipients()); transport.close(); This latter way is best when you need to send multiple messages, as it will keep the connection with the mail server active between messages. The basic send() mechanism makes a separate connection to the server for each method call. Note: To watch the mail commands go by to the mail server, set the debug flag with session.setDebug(true). Store and folder Getting messages starts similarly to sending messages with a Session. However, after getting the session, you connect to a Store , quite possibly with a username and password or Authenticator. Like Transport, you tell the Store what protocol to use: // Store store = session.getStore("imap"); Store store = session.getStore("pop3"); store.connect(host, username, password); After connecting to the Store, you can then get a Folder , which must be o
pe
ned before you can read messages from it: Folder folder = store.getFolder("INBOX"); folder.o
pe
n(Folder.READ_ONLY); Message message[] = folder.getMessages(); For POP3, the only folder available is the INBOX. If you are using IMAP, you can have other folders available. Note: Sun's providers are meant to be smart. While Message message[] = folder.getMessages(); might look like a slow o
pe
ration reading every message from the server, only when you actually need to get a part of the message is the message
cont
ent retrieved. Once you have a Message to read, you can get its
cont
ent with get
Cont
ent() or write its
cont
ent to a stream with writeTo(). The get
Cont
ent() method only gets the message
cont
ent, while writeTo() output includes headers. Fundamentals of the
JavaMail
API Page 11 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks System.out.println(((MimeMessage)message).get
Cont
ent()); Once you're done reading mail, close the connection to the folder and store. folder.close(aBoolean); store.close(); The boolean passed to the close() method of folder states whether or not to update the folder by removing deleted messages. Moving on Essentially, understanding how to use these seven classes is all you need for nearly everything with the
JavaMail
API. Most of the other capabilities of the
JavaMail
API build off these seven classes to do something a little different or in a particular way, like if the
cont
ent is an attachment. Certain tasks, like searching, are isolated and are discussed later. Fundamentals of the
JavaMail
API Page 12 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 6. Using the
JavaMail
API Introduction You've seen how to work with the core parts of the
JavaMail
API. In the following sections you'll find a how-to approach for connecting the pieces to do s
pe
cific tasks. Sending messages Sending an e-mail message involves getting a session, creating and filling a message, and sending it. You can s
pe
cify your SMTP server by setting the mail.smtp.host pro
pe
rty for the Pro
pe
rties object passed when getting the Session: String host = ...; String from = ...; String to = ...; // Get system pro
pe
rties Pro
pe
rties props = System.getPro
pe
rties(); // Setup mail server props.put("mail.smtp.host", host); // Get session Session session = Session.getDefaultInstance(props, null); // Define message MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.Recipi
entTy
pe
.TO, new InternetAddress(to)); message.setSubject("Hello
JavaMail
"); message.setText("Welcome to
JavaMail
"); // Send message Transport.send(message); You should place the code in a try-catch block, as setting up the message and sending it can throw exceptions. Exercise: Exercise 2. How to send your first message on page 23 Fetching messages For reading mail, you get a session, get and connect to an appropriate store for your mailbox, o
pe
n the appropriate folder, and get your messages. Also, don't forget to close the connection when done. String host = ...; String username = ...; String password = ...; // Create empty pro
pe
rties Pro
pe
rties props = new Pro
pe
rties(); // Get session Session session = Session.getDefaultInstance(props, null); Fundamentals of the
JavaMail
API Page 13 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks // Get the store Store store = session.getStore("pop3"); store.connect(host, username, password); // Get folder Folder folder = store.getFolder("INBOX"); folder.o
pe
n(Folder.READ_ONLY); // Get directory Message message[] = folder.getMessages(); for (int i=0, n=message.length; i
peaking, the list of from addresses could be empty and the getFrom()[0] call could throw an exception. To display the whole message, you can prompt the user after seeing the from and subject fields, and then call the message's writeTo() method if the user wants to see it. BufferedReader reader = new BufferedReader ( new InputStreamReader(System.in)); // Get directory Message message[] = folder.getMessages(); for (int i=0, n=message.length; i
JavaMail API Page 14 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Just because a flag exists doesn't mean the flag is supported by all mail servers or providers. For instance, except for deleting messages, the POP protocol supports none of them. Checking for new mail is not a POP task but a task built into mail clients. To find out what flags are supported, ask the folder with get
Pe
rmanentFlags(). To delete messages, you set the message's DELETED flag: message.setFlag(Flags.Flag.DELETED, true); O
pe
n up the folder in READ_WRITE mode first though: folder.o
pe
n(Folder.READ_WRITE); Then, when you are done processing all messages, close the folder, passing in a true value to expunge the deleted messages. folder.close(true); There is an expunge() method of Folder that can be used to delete the messages. However, it doesn't work for Sun's POP3 provider. Other providers may or may not implement the capabilities. It will more than likely be implemented for IMAP providers. Because POP only supports single access to the mailbox, you have to close the folder to delete the messages with Sun's provider. To unset a flag, just pass false to the setFlag() method. To see if a flag is set, check it with isSet(). Authenticating yourself You learned that you can use an Authenticator to prompt for username and password when needed, instead of passing them in as strings. Here you'll actually see how to more fully use authentication. Instead of connecting to the Store with the host, username, and password, you configure the Pro
pe
rties to have the host, and tell the Session about your custom Authenticator instance, as shown here: // Setup pro
pe
rties Pro
pe
rties props = System.getPro
pe
rties(); props.put("mail.pop3.host", host); // Setup authentication, get session Authenticator auth = new PopupAuthenticator(); Session session = Session.getDefaultInstance(props, auth); // Get the store Store store = session.getStore("pop3"); store.connect(); You then subclass Authenticator and return a PasswordAuthentication object from the getPasswordAuthentication() method. The following is one such implementation, with a single field for both. (This isn't a Project Swing tutorial; just enter the two parts in the one field, separated by a comma.) Fundamentals of the
JavaMail
API Page 15 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks import javax.mail.*; import javax.swing.*; import java.util.*; public class PopupAuthenticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { String username, password; String result = JOptionPane.showInputDialog( "Enter 'username,password'"); StringTokenizer st = new StringTokenizer(result, ","); username = st.nextToken(); password = st.nextToken(); return new PasswordAuthentication(username, password); } } Because the PopupAuthenticator relies on Swing, it will start up the event-handling thread for AWT. This basically requires you to add a call to System.exit() in your code to stop the program. Replying to messages The Message class includes a reply() method to configure a new Message with the pro
pe
r recipient and subject, adding "Re: " if not already there. This does not add any
cont
ent to the message, only copying the from or reply-to header to the new recipient. The method takes a boolean parameter indicating whether to reply to only the sender (false) or reply to all (true). MimeMessage reply = (MimeMessage)message.reply(false); reply.setFrom(new InternetAddress("president@whitehouse.gov")); reply.setText("Thanks"); Transport.send(reply); To configure the reply-to address when sending a message, use the setReplyTo() method. Exercise: Exercise 4. How to reply to mail on page 27 Forwarding messages Forwarding messages is a little more involved. There is no single method to call, and you build up the message to forward by working with the parts that make up a message. A mail message can be made up of multiple parts. Each part is a BodyPart , or more s
pe
cifically, a MimeBodyPart when working with MIME messages. The different body parts get combined into a
cont
ainer called Multipart or, again, more s
pe
cifically a MimeMultipart . To forward a message, you create one part for the text of your message and a second part with the message to forward, and combine the two into a multipart. Then you add the multipart to a pro
pe
rly addressed message and send it. That's essentially it. To copy the
cont
ent from one message to another, just copy over its Fundamentals of the
JavaMail
API Page 16 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks DataHandler , a class from the JavaBeans Activation Framework. // Create the message to forward Message forward = new MimeMessage(session); // Fill in header forward.setSubject("Fwd: " + message.getSubject()); forward.setFrom(new InternetAddress(from)); forward.addRecipient(Message.Recipi
entTy
pe
.TO, new InternetAddress(to)); // Create your new message part BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText( "Here you go with the original message:\n\n"); // Create a multi-part to combine the parts Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Create and fill part for the forwarded
cont
ent messageBodyPart = new MimeBodyPart(); messageBodyPart.setDataHandler(message.getDataHandler()); // Add part to multi part multipart.addBodyPart(messageBodyPart); // Associate multi-part with message forward.set
Cont
ent(multipart); // Send message Transport.send(forward); Working with attachments Attachments are resources associated with a mail message, usually kept outside of the message like a text file, spreadsheet, or image. As with common mail programs like Eudora and pine, you can attach resources to your mail message with the
JavaMail
API and get those attachments when you receive the message. Sending attachments: Sending attachments is quite like forwarding messages. You build up the parts to make the complete message. After the first part, your message text, you add other parts where the DataHandler for each is your attachment, instead of the shared handler in the case of a forwarded message. If you are reading the attachment from a file, your attachment data source is a FileDataSource . Reading from a URL, it is a URLDataSource . Once you have your DataSource, just pass it on to the DataHandler constructor, before finally attaching it to the BodyPart with setDataHandler(). Assuming you want to retain the original filename for the attachment, the last thing to do is to set the filename associated with the attachment with the setFileName() method of BodyPart. All this is shown here: // Define message Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.Recipi
entTy
pe
.TO, new InternetAddress(to)); message.setSubject("Hello
JavaMail
Attachment"); // Create the message part BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message messageBodyPart.setText("Pardon Ideas"); Fundamentals of the
JavaMail
API Page 17 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // Put parts in message message.set
Cont
ent(multipart); // Send the message Transport.send(message); When including attachments with your messages, if your program is a servlet, your users must upload the attachment besides telling you where to send the message. Uploading each file can be handled with a form encoding ty
pe
of multipart/form-data.
PE="multipart/form-data" method=post action="/myservlet">
PE="file" NAME="thefile">
PE="submit" VALUE="Upload">
Note: Message size is limited by your SMTP server, not the
JavaMail
API. If you run into problems, consider increasing the Java heap size by setting the ms and mx parameters. Exercise: Exercise 5. How to send attachments on page 28 Getting attachments: Getting attachments out of your messages is a little more involved then sending them because MIME has no simple notion of attachments. The
cont
ent of your message is a Multipart object when it has attachments. You then need to process each Part, to get the main
cont
ent and the attachment(s). Parts marked with a disposition of Part.ATTACHMENT from part.getDisposition() are clearly attachments. However, attachments can also come across with no disposition (and a non-text MIME ty
pe
) or a disposition of Part.INLINE. When the disposition is either Part.ATTACHMENT or Part.INLINE, you can save off the
cont
ent for that message part. Just get the original filename with getFileName() and the input stream with getInputStream(). Multipart mp = (Multipart)message.get
Cont
ent(); for (int i=0, n=multipart.getCount(); i
JavaMail API Page 18 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks for (int i=0; file.exists(); i++) { file = new File(filename+i); } The code above covers the simplest case where message parts are flagged appropriately. To cover all cases, handle when the disposition is null and get the MIME ty
pe
of the part to handle accordingly. if (disposition == null) { // Check if plain MimeBodyPart mbp = (MimeBodyPart)part; if (mbp.isMimeTy
pe
("text/plain")) { // Handle plain } else { // S
pe
cial non-attachment cases here of image/gif, text/html, ... } ... } Processing HTML messages Sending HTML-based messages can be a little more work than sending plain text message, though it doesn't have to be that much more work. It all de
pe
nds on your s
pe
cific requirements. Sending HTML messages: If all you need to do is send the equivalent of an HTML file as the message and let the mail reader worry about fetching any embedded images or related pieces, use the set
Cont
ent() method of Message, passing along the
cont
ent as a String and setting the
cont
ent ty
pe
to text/html. String htmlText = "
Hello
" + "
"; message.set
Cont
ent(htmlText, "text/html")); On the receiving end, if you fetch the message with the
JavaMail
API, there is nothing built into the API to display the message as HTML. The
JavaMail
API only sees it as a stream of bytes. To display the message as HTML, you must either use the Swing JEditorPane or some third-party HTML viewer component. if (message.get
Cont
entTy
pe
().equals("text/html")) { String
cont
ent = (String)message.get
Cont
ent(); JFrame frame = new JFrame(); JEditorPane text = new JEditorPane("text/html",
cont
ent); text.setEditable(false); JScrollPane pane = new JScrollPane(text); frame.get
Cont
entPane().add(pane); frame.setSize(300, 300); frame.setDefaultCloseO
pe
ration(JFrame.DISPOSE_ON_CLOSE); frame.show(); } Including images with your messages: On the other hand, if you want your HTML
cont
ent message to be complete, with embedded images included as part of the message, you must treat the image as an attachment and reference the image with a s
pe
cial cid URL, where the cid is a reference to the
Cont
ent-ID header of the image attachment. The process of embedding an image is quite similar to attaching a file to a message, the only Fundamentals of the
JavaMail
API Page 19 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks difference is you have to tell the MimeMultipart that the parts are related by setting its subty
pe
in the constructor (or with setSubTy
pe
()) and set the
Cont
ent-ID header for the image to a random string which is used as the src for the image in the img tag. The following demonstrates this completely. String file = ...; // Create the message Message message = new MimeMessage(session); // Fill its headers message.setSubject("Embedded Image"); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.Recipi
entTy
pe
.TO, new InternetAddress(to)); // Create your new message part BodyPart messageBodyPart = new MimeBodyPart(); String htmlText = "
Hello
" + "
"; messageBodyPart.set
Cont
ent(htmlText, "text/html"); // Create a related multi-part to combine the parts MimeMultipart multipart = new MimeMultipart("related"); multipart.addBodyPart(messageBodyPart); // Create part for the image messageBodyPart = new MimeBodyPart(); // Fetch the image and associate to part DataSource fds = new FileDataSource(file); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setHeader("
Cont
ent-ID","memememe"); // Add part to multi-part multipart.addBodyPart(messageBodyPart); // Associate multi-part with message message.set
Cont
ent(multipart); Exercise: Exercise 6. How to send HTML messages with images on page 29 Fundamentals of the
JavaMail
API Page 20 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 7. Searching with SearchTerm Introduction The
JavaMail
API includes a filtering mechanism found in the javax.mail.search package to build up a SearchTerm . Once built, you then ask a Folder what messages match, retrieving an array of Message objects: SearchTerm st = ...; Message[] msgs = folder.search(st); There are 22 different classes available to help you build a search term. * AND terms (class AndTerm) * OR terms (class OrTerm) * NOT terms (class NotTerm) * SENT DATE terms (class SentDateTerm) *
CONT
ENT terms (class BodyTerm) * HEADER terms (FromTerm / FromStringTerm, RecipientTerm / RecipientStringTerm, SubjectTerm, etc..) Essentially, you build up a logical expression for matching messages, then search. For instance the following term searches for messages with a (partial) subject string of ADV or a from field of friend@public.com. You might consider
pe
riodically running this query and automatically deleting any messages returned. SearchTerm st = new OrTerm( new SubjectTerm("ADV:"), new FromStringTerm("friend@public.com")); Message[] msgs = folder.search(st); Fundamentals of the
JavaMail
API Page 21 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 8. Exercises About the exercises These exercises are designed to provide help according to your needs. For example, you might simply complete the exercise given the information and the task list in the exercise body; you might want a few hints; or you may want a step-by-step guide to successfully complete a particular exercise. You can use as much or as little help as you need
pe
r exercise. Moreover, because complete solutions are also provided, you can skip a few exercises and still be able to complete future exercises requiring the skip
pe
d ones. Each exercise has a list of any prerequisite exercises, a list of skeleton code for you to start with, links to necessary API pages, and a text description of the exercise goal. In addition, there is help for each task and a solutions page with links to files that comprise a solution to the exercise. Exercise 1. How to set up a
JavaMail
environment In this exercise you will install Sun's
JavaMail
reference implementation. After installing, you will be introduced to the demonstration programs that come with the reference implementation. Task 1: Download the latest version of the
JavaMail
API implementation from Sun. Task 2: Download the latest version of the JavaBeans Activation Framework from Sun. Task 3: Unzip the downloaded packages. You get a ZIP file for all platforms for both packages. Help for task 3: You can use the jar tool to unzip the packages. Task 4: Add the mail.jar file from the
JavaMail
1.2 download and the activation.jar file from the JavaBeans Activation Framework download to your CLASSPATH. Help for task 4: Copy the files to your extension library directory. For Microsoft Windows, using the default installation copy, the command might look like the following: cd \
javamail
-1.2 copy mail.jar \jdk1.3\jre\lib\ext cd \jaf-1.0.1 copy activation.jar \jdk1.3\jre\lib\ext If you don't like copying the files to the extension library directory, detailed instructions are available from Sun for setting your CLASSPATH on Windows NT. Task 5: Go into the demo directory that comes with the
JavaMail
API implementation and compile the msgsend program to send a test message. Help for task 5: javac msgsend.java Fundamentals of the
JavaMail
API Page 22 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Task 6: Execute the program passing in a from address with the -o option, your SMTP server with the -M option, and the to address (with no option). You'll then enter the subject, the text of your message, and the end-of-file character (CTRL-Z) to signal the end of the message input. Help for task 6: Be sure to replace the from address, SMTP server, and to address. java msgsend -o from@address -M SMTP.Server to@address If you are not sure of your SMTP server,
cont
act your system administrator or check with your Internet Service Provider. Task 7: Check to make sure you received the message with your normal mail reader (Eudora, Outlook Express, pine, ...). Exercise 1. How to set up a
JavaMail
environment: Solution Upon successful completion, the
JavaMail
reference implementation will be in your CLASSPATH. Exercise 2. How to send your first message In the last exercise you sent a mail message using the demonstration program provided with the
JavaMail
implementation. In this exercise, you'll create the program yourself. For more help with exercises, see About the exercises on page 22 . Prerequisites: * Exercise 1. How to set up a
JavaMail
environment on page 22 Skeleton code: * MailExample.java Task 1: Starting with the skeleton code , get the system Pro
pe
rties. Help for task 1: Pro
pe
rties props = System.getPro
pe
rties(); Task 2: Add the name of your SMTP server to the pro
pe
rties for the mail.smtp.host key. Fundamentals of the
JavaMail
API Page 23 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Help for task 2: props.put("mail.smtp.host", host); Task 3: Get a Session object based on the Pro
pe
rties. Help for task 3: Session session = Session.getDefaultInstance(props, null); Task 4: Create a MimeMessage from the session. Help for task 4: MimeMessage message = new MimeMessage(session); Task 5: Set the from field of the message. Help for task 5: message.setFrom(new InternetAddress(from)); Task 6: Set the to field of the message. Help for task 6: message.addRecipient(Message.Recipi
entTy
pe
.TO, new InternetAddress(to)); Task 7: Set the subject of the message. Help for task 7: message.setSubject("Hello
JavaMail
"); Task 8: Set the
cont
ent of the message. Help for task 8: message.setText("Welcome to
JavaMail
"); Task 9: Use a Transport to send the message. Help for task 9: Transport.send(message); Task 10: Compile and run the program, passing your SMTP server, from address, and to address on the command line. Fundamentals of the
JavaMail
API Page 24 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Help for task 10: java MailExample SMTP.Server from@address to@address Task 11: Check to make sure you received the message with your normal mail reader (Eudora, Outlook Express, pine, ...). Exercise 2. How to send your first message: Solution The following Java source file represents a solution to this exercise: * Solution/MailExample.java Exercise 3. How to check for mail In this exercise, create a program that displays the from address and subject for each message and prompts to display the message
cont
ent. For more help with exercises, see About the exercises on page 22 . Prerequisites: * Exercise 1. How to set up a
JavaMail
environment on page 22 Skeleton Code * GetMessageExample.java Task 1: Starting with the skeleton code , get or create a Pro
pe
rties object. Help for task 1: Pro
pe
rties props = new Pro
pe
rties(); Task 2: Get a Session object based on the Pro
pe
rties. Help for task 2: Session session = Session.getDefaultInstance(props, null); Task 3: Get a Store for your e-mail protocol, either pop3 or imap. Help for task 3: Store store = session.getStore("pop3"); Task 4: Connect to your mail host's store with the appropriate username and password. Fundamentals of the
JavaMail
API Page 25 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Help for task 4: store.connect(host, username, password); Task 5: Get the folder you want to read. More than likely, this will be the INBOX. Help for task 5: Folder folder = store.getFolder("INBOX"); Task 6: O
pe
n the folder read-only. Help for task 6: folder.o
pe
n(Folder.READ_ONLY); Task 7: Get a directory of the messages in the folder. Save the message list in an array variable named message. Help for task 7: Message message[] = folder.getMessages(); Task 8: For each message, display the from field and the subject. Help for task 8: System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject()); Task 9: Display the message
cont
ent when prompted. Help for task 9: System.out.println(message[i].get
Cont
ent()); Task 10: Close the connection to the folder and store. Help for task 10: folder.close(false); store.close(); Task 11: Compile and run the program, passing your mail server, username, and password on the command line. Answer YES to the messages you want to read. Just hit ENTER if you don't. If you want to stop reading your mail before making your way through all the messages, enter QUIT. Help for task 11: java GetMessageExample POP.Server username password Fundamentals of the
JavaMail
API Page 26 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Exercise 3. How to check for mail: Solution The following Java source file represents a solution to this exercise. * Solution/GetMessageExample.java Exercise 4. How to reply to mail In this exercise, create a program that creates a canned reply message and attaches the original message if it's plain text. For more help with exercises, see About the exercises on page 22 . Prerequisites: * Exercise 3. How to check for mail on page 25 Skeleton Code: * ReplyExample.java Task 1: The skeleton code already includes the code to get the list of messages from the folder and prompt you to create a reply. Task 2: When answered affirmatively, create a new MimeMessage from the original message. Help for task 2: MimeMessage reply = (MimeMessage)message[i].reply(false); Task 3: Set the from field to your e-mail address. Task 4: Create the text for the reply. Include a canned message to start. When the original message is plain text, add each line of the original message, prefix each line with the "> " characters. Help for task 4: To check for plain text messages, check the messages MIME ty
pe
with mimeMessage.isMimeTy
pe
("text/plain"). Task 5: Set the message's
cont
ent, once the message
cont
ent is fully determined. Task 6: Send the message. Task 7: Compile and run the program, passing your mail server, SMTP server, username, password, and from address on the command line. Answer YES to the messages you want to send replies. Just hit ENTER if you don't. If you want to stop going through your mail before Fundamentals of the
JavaMail
API Page 27 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks making your way through all the messages, enter QUIT. Help for task 7: java ReplyExample POP.Server SMTP.Server username password from@address Task 8: Check to make sure you received the message with your normal mail reader (Eudora, Outlook Express, pine, ...). Exercise 4. How to reply to mail: Solution The following Java source file represents a solution to this exercise. * Solution/ReplyExample.java Exercise 5. How to send attachments In this exercise, create a program that sends a message with an attachment. For more help with exercises, see About the exercises on page 22 . Prerequisites: * Exercise 2. How to send your first message on page 23 Skeleton Code: * AttachExample.java Task 1: The skeleton code already includes the code to get the initial mail session. Task 2: From the session, get a Message and set its header fields: to, from, and subject. Task 3: Create a BodyPart for the main message
cont
ent and fill its
cont
ent with the text of the message. Help for task 3: BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("Here's the file"); Task 4: Create a Multipart to combine the main
cont
ent with the attachment. Add the main
cont
ent to the multipart. Help for task 4: Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); Fundamentals of the
JavaMail
API Page 28 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Task 5: Create a second BodyPart for the attachment. Task 6: Get the attachment as a DataSource. Help for task 6: DataSource source = new FileDataSource(filename); Task 7: Set the DataHandler for the message part to the data source. Carry the original filename along. Help for task 7: messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); Task 8: Add the second part of the message to the multipart. Task 9: Set the
cont
ent of the message to the multipart. Help for task 9: message.set
Cont
ent(multipart); Task 10: Send the message. Task 11: Compile and run the program, passing your SMTP server, from address, to address, and filename on the command line. This will send the file as an attachment. Help for task 11: java AttachExample SMTP.Server from@address to@address filename Task 12: Check to make sure you received the message with your normal mail reader (Eudora, Outlook Express, pine, ...). Exercise 5. How to send attachments: Solution The following Java source file represents a solution to this exercise. * Solution/AttachExample.java Exercise 6. How to send HTML messages with images In this exercise, create a program that sends an HTML message with an image attachment where the image is displayed within the HTML message. Fundamentals of the
JavaMail
API Page 29 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks For more help with exercises, see About the exercises on page 22 . Prerequisites: * Exercise 5. How to send attachments on page 28 Skeleton code: * logo.gif * HtmlImageExample.java Task 1: The skeleton code already includes the code to get the initial mail session, create the main message, and fill its headers (to, from, subject). Task 2: Create a BodyPart for the HTML message
cont
ent. Task 3: Create a text string of the HTML
cont
ent. Include a reference in the HTML to an image (
) that is local to the mail message. Help for task 3: Use a cid URL. The
cont
ent-id will need to be s
pe
cified for the image later. String htmlText = "
Hello
" + "
"; Task 4: Set the
cont
ent of the message part. Be sure to s
pe
cify the MIME ty
pe
is text/html. Help for task 4: messageBodyPart.set
Cont
ent(htmlText, "text/html"); Task 5: Create a Multipart to combine the main
cont
ent with the attachment. Be sure to s
pe
cify that the parts are related. Add the main
cont
ent to the multipart. Help for task 5: MimeMultipart multipart = new MimeMultipart("related"); multipart.addBodyPart(messageBodyPart); Task 6: Create a second BodyPart for the attachment. Task 7: Get the attachment as a DataSource, and set the DataHandler for the message part to the data source. Task 8: Set the
Cont
ent-ID header for the part to match the image reference s
pe
cified in the HTML. Help for task 8: messageBodyPart.setHeader("
Cont
ent-ID","memememe"); Task 9: Add the second part of the message to the multipart, and set the
cont
ent of the Fundamentals of the
JavaMail
API Page 30 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks message to the multipart. Task 10: Send the message. Task 11: Compile and run the program, passing your SMTP server, from address, to address, and filename on the command line. This will send the images as an inline image within the HTML text. Help for task 11: java HtmlImageExample SMTP.Server from@address to@address filename Task 12: Check if your mail reader recognizes the message as HTML and displays the image within the message, instead of as a link to an external attachment file. Help for task 12: If your mail reader can't display HTML messages, consider sending the message to a friend. Exercise 6. How to send HTML messages with images: Solution The following Java source files represent a solution to this exercise. * Solution/logo.gif * Solution/HtmlImageExample.java Fundamentals of the
JavaMail
API Page 31 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Section 9. Wrapup In summary The
JavaMail
API is a Java package used for reading, composing, and sending e-mail messages and their attachments. It lets you build standards-based e-mail clients that employ various Internet mail protocols, including SMTP, POP, IMAP, and MIME, as well as related protocols such as NNTP, S/MIME, and others. The API divides naturally into two parts. The first focuses on sending, receiving, and managing messages inde
pe
ndent of the protocol used, whereas the second focuses on s
pe
cific use of the protocols. The purpose of this tutorial was to show how to use the first part of the API, without attempting to deal with protocol providers. The core
JavaMail
API consists of seven classes --Session, Message, Address, Authenticator, Transport, Store, and Folder --all of which are found in javax.mail, the top-level package for the
JavaMail
API. We used these classes to work through a number of common e-mail-related tasks, including sending messages, retrieving messages, deleting messages, authenticating, replying to messages, forwarding messages, managing attachments, processing HTML-based messages, and searching or filtering mail lists. Finally, we provided a number of step-by-step exercises to help illustrate the concepts presented. Ho
pe
fully, this will help you add e-mail functionality to your platform-inde
pe
ndent Java applications. Resources You can do much more with the
JavaMail
API than what's found here. The lessons and exercises found here can be supplemented by the following resources: * Download the
JavaMail
1.2 API from the
JavaMail
API home page . * The JavaBeans Activation Framework is required for versions 1.2 and 1.1.3 of the
JavaMail
API. * The
JavaMail
-interest mailing list is a Sun-hosted discussion forum for develo
pe
rs. * Sun's
JavaMail
FAQ addresses the use of
JavaMail
in applets and servlets, as well as prototol-s
pe
cific questions. * Tutorial author John Zukowski maintains jGuru's
JavaMail
FAQ . * Want to see how others are using
JavaMail
? Check out Sun's list of third-party products. * If you want more detail about
JavaMail
, read Rick Grehan's "How
JavaMail
keeps it simple" (Lotus Develo
pe
r Network, June 2000). * Benoit Marchal shows how to use Java and XML to produce plain text and HTML newsletters in this two-part series, "Managing e-zines with
JavaMail
and XSLT" Part 1 (develo
pe
rWorks, March 2001) and Part 2 (develo
pe
rWorks, April 2001). * "Linking Applications with E-mail" (Lotus Develo
pe
r Network, May 2000) discusses how groupware can facilitate communication, collaboration, and coordination among applications. Fundamentals of the
JavaMail
API Page 32 Presented by develo
pe
rWorks, your source for great tutorials ibm.com/develo
pe
rWorks Feedback Please let us know whether this tutorial was helpful to you and how we could make it better. We'd also like to hear about other tutorial topics you'd like to see covered. Thanks! For questions about the
cont
ent of this tutorial,
cont
act the author John Zukowski ( jaz@zukowski.net ) Colophon This tutorial was written entirely in XML, using the develo
pe
rWorks Toot-O-Matic tutorial generator. The Toot-O-Matic tool is a short Java program that uses XSLT stylesheets to convert the XML source into a number of HTML pages, a zip file, J
PE
G heading graphics, and PDF files. Our ability to generate multiple text and binary formats from a single source file illustrates the power and flexibility of XML. Fundamentals of the
JavaMail
API Page 33
JavaMail
详解
一、
JavaMail
概述:
JavaMail
是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK
中
,而是作为JavaEE的一部分。 厂商所提供的
JavaMail
服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: l SMTP:简单邮件传输协议,用于发送电子邮件的传输协议; l P
JavaWeb基础核心技术
本Java视频教程涵盖JavaWEB 企业级开发所需的Servlet、JSP、MVC 设计模式、EL 表达式、JavaBean、国际化、Cookie和HttpSession、
JavaMail
等全部核心技术。 授课过程
中
通过多个企业级案例,将各知识点融会贯通。
java 发送邮件 格式_
JavaMail
发送邮件后再通过
JavaMail
接收格式
问题
关于
JavaMail
如何发送邮件这里就不赘述了,网上有很多例子。其
中
最复杂的邮件发送莫过于 html邮件包含内嵌图片以及附件,最近项目
中
的这项功能我在发送邮件时就出现了一系列
问题
。我在使用
JavaMail
发送了邮件之后,会再次通过
JavaMail
将其获取回来进行解析,由于发送操作不当,导致了解析就不是那么回事了。接下来先看看正常的解析过程吧。关于邮件的解析,网上依然有很多例子。priv...
JavaMail
读取邮件
问题
的解决
JavaMail
读取邮件过程
中
,读取正文内容的时候,返回的是“类名@哈希值”,导致解析的过程出错 ** 一、
问题
重现
问题
重现: 这个动作在myeclipse里最开始没有重现,是在服务器上出现的,比对环境后发现
问题
: 开发环境:myeclipse+内置tomcat+com.sun.java.jdk.win32.x86_64_1.6.0.013 服务器环境:tomcat6.0.14...
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章