當前位置:名人名言大全網 - 短信平臺 - spring-ws 在客戶端用webservicemessage 返回的response輸出到控制臺 ,內容如下:

spring-ws 在客戶端用webservicemessage 返回的response輸出到控制臺 ,內容如下:

1.發送電子郵件

首先應該構建JavaMail的開發環境,在JDK中配置JavaMail的相關類和包。在構建JavaMail開發環境中,需要mail.jar和activation.jar這兩個文件。這兩個文件的獲得可以通過SUN公司的官方網站下載。

JavaMail對STMP、POP3、IMAP提供支持,封裝了電子郵件功能中的郵件對象、發送、身份驗證、接收等功能。

在發送各種類型的郵件時,主要應用到下面幾個類:

1)Session類。用戶要想發送郵件首先需要創建Session類的對象,利用這個對象創建郵件對象、指定郵件服務器認證的客戶端屬性。它的類層次為javax.mail.Session。

2)InternetAddress類。郵件發送的地址類,類層次結構是javax.mail.internet.InternetAddress,它繼承自抽象類javax.mail.Address。

3)MimeMessage類。郵件消息類,它的類層次結構是javax.mail.internet.MimeMessage,繼承自抽象類javax.mail.Message。

4)Transport類。郵件發送類,它的類層次結構是javax.mail.Transport。

5)Authenticator類。授權者類,JavaMail通過使用Authenticator類以用戶名、密碼的方式訪問那些受到保護的資源,在這裏“資源”就是郵件服務器。其類層次結構為javax.mail.Authenticator。

6)Store類。用來從郵件服務器上接受郵件,其類層次結構為javax.mail.Store。

7)Folder類。郵件文件夾類,它的類層次結構為javax.mail.Folder。

實現過程:

<%@ page import="java.io.*"%>

<%@ page import="java.util.*"%>

<%@ page import="javax.mail.*"%>

<%@ page import="javax.mail.internet.*"%>

<%@ page import="javax.activation.*"%>

<%

try{

request.setCharacterEncoding("gb2312");

String from = request.getParameter("jname");

String to = request.getParameter("sname");

String subject = request.getParameter("title");

String messageText = request.getParameter("message");

String password = request.getParameter("password");

String S = request.getParameter("jname");

int n = S.indexOf('@');

int m = S.length();

String server = S.substring(n+1,m);

//建立郵件會話

Properties pro = new Properties();

pro.put("mail.smtp.host","smtp."+server);

pro.put("mail.stmp.auth","true");

Session sess = Session.getInstance(pro);

sess.setDebug(true);

MimeMessage message = new MimeMessage(mess);//新建壹個消息對象

//設置發件人

InternetAddress from_mail = new InternetAddress(from);

message.setFrom(from_mail);

//設置收件人

InternetAddress to_mail = new InternetAddress(to);

message.setRecipient(Message.RecipientType.TO,to_mail);

message.setSubject(subject);//設置主題

message.setText(messageText);//設置內容

message.setSentDate(new Date());//設置發送時間

//發送郵件

message.saveChanges();//保存郵件信息

Transport transport = sess.getTransport("smtp");

transport.connect("smtp."+server,from,password);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

out.print("郵件發送成功");

}catch(Exception e){

out.print("發送郵件失敗,原因可能是<ul>");

out.println(e.getMessage());

}

%>

2.發送HTML格式的郵件

MimeMultipart對象來存儲HTML文件的具體內容,在設置內容的同時應該設置對象的格式。

MimeMultipart類的類層次結構是javax.mail.Internet.MimeMultipart。壹般保存電子郵件內容的容器是Multipart抽象類,它定義了增加、刪除及獲得電子郵件不同內容的方法。由於Multipart是抽象類,所以必須使用壹個具體的子類,JavaMail API提供javax.mail.Internet.MimeMultipart類來使用MimeMessage對象。

語法:

Multipart mul = new MimeMultipart();

說明:使用MimeMultipart對象時常用的壹個方法是addBodyPart(),它可以在電子郵件的內容裏添加BodyPart對象,消息可以有很多部分,壹個BodyPart可以代表壹個部分。

MimeBodyPart類的類層次結構是javax.mail.Internet.MimeBodyPart。MimeBodyPart是BodyPart具體於MimeMessage的壹個子類。MimeBodyPart對象代表壹個MimeMessage對象內容的壹部分,每個MimeBodyPart被認為由兩部分組成:壹個MIME類型和匹配這個類型的內容。

語法:

BodyPart mdp = new MimeBodyPart();//新建壹個存放信件內容的BodyPart對象

String messageText = "Hello World!";

//定義MIME類型為text/html,並設置MimeBodyPart的內容

mdp.setContent(messageText,"text/html");

實現過程:

<%@ page import="java.io.*"%>

<%@ page import="java.util.*"%>

<%@ page import="javax.mail.*"%>

<%@ page import="javax.mail.internet.*"%>

<%@ page import="javax.activation.*"%>

<%

try{

request.setCharacterEncoding("gb2312");

String from_mail = request.getParameter("sname");

String to_mail = request.getParameter("rname");

String subject = request.getParameter("title");

String messageText = request.getParameter("message");

String password = request.getParameter("password");

String S = request.getParameter("sname");

int n = S.indexOf('@');

int m = S.length();

String server = S.substring(n+1,m);

Properties prop = new Properties();

prop.put("mail.smtp.host","smtp."+server);

prop.put("mail.smtp.auth","true");

Session sess = Session.getInstance(prop);

sess.setDebug(true);

MimeMessage message = new MimeMessage(sess);

//給消息對象設置收件人、發件人、主題、發信時間

InternetAddress from = new InternetAddress(from_mail);

message.setFrom(from);

InternetAddress to = new InternetAddress(to_mail);

message.setRecipient(Message.RecipientType.TO,to);

message.setSubject(subject);

message.setSentDate(new Date());

Multipart mul = new Multipart();//新建壹個MimeMultipart對象來存放多個BodyPart對象

BodyPart mdp = new MimeBodyPart();//新建壹個存放信件內容的BodyPart對象

mdp.setContent(messageText,"text/html;charset=gb2312");

mul.addBodyPart(mdp);//將含有信件內容的BodyPart加入到MimeMultipart對象中

message.saveChanges();

Transport transport = sess.getTransport("smtp");

transport.connect("smtp."+server,from_mail,password);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

out.println("郵件發送成功!");

}catch(Exception e){

out.print("發送郵件失敗,原因可能是<ul>");

out.println(e.getMessage());

}

%>

3.帶附件的郵件發送

壹般,在設計帶有附件的郵件發送程序時可以遵循以下步驟:

1)發送帶有附件的郵件需要建立郵件的各個郵件體部分,在第壹個部分(即郵件內容文字)後增加壹個具有DataHandler的附件。

2)如果將文件作為附件發送,則要建立FileDataSource類型的對象作為附件數據源;如果從URL讀取數據作為附件發送,則要建立URLDataSource類型的對象作為附件數據源。

3)將數據源(FileDataSource或是URLDataSource)對象作為DataHandler類的構造方法的參數傳入,從而建立壹個DataHandler對象作為數據源的DataHandler。

4)將這個DataHandler設置為郵件體部分的DataHandler,這樣就完成了郵件體與附件之間的關聯工作。下面的工作就是用BodyPart的setFileName()方法設置附件名為原文件名。

5)將兩個郵件體放入到Multipart,設置郵件內容為這個容器的Multipart,發送郵件。

實現過程:

<%@ page import="java.io.*"%>

<%@ page import="java.util.*"%>

<%@ page import="javax.mail.*"%>

<%@ page import="javax.mail.internet.*"%>

<%@ page import="javax.activation.*"%>

<%@ page import="java.net.*"%>

<%

try{

request.setCharacterEncoding("gb2312");

String from_mail = request.getParameter("sname");

Stirng to_mail = request.getParameter("rname");

String from_psd = request.getParameter("password");

String title = request.getParameter("title");

String content = request.getParameter("content");

String path = request.getParameter("attachement");

String S = request.getParameter("sname");

int n = S.indexOf('@');

int m = S.length();

String server = S.substring(n+1,m);

Properties prop = new Properties();

prop.put("mail.smtp.host","smtp."+server);

prop.put("mail.smtp.auth","true");

Session sess = Session.getInstance(prop);

session.setDebug(true);

MimeMessage message = new MimeMessage(sess);

//給消息對象設置收件人、發件人、主題

InternetAddress from = new InternetAddress(from_mail);

message.setFrom(from);

InternetAddress to = new InternetAddress(to_mail);

message.setRecipient(Message.RecipientType.TO,to);

message.setSubject(title);

Multipart mul = new MimeMultipart();//新建壹個MimeMultipart對象來存放多個BodyPart對象

BodyPart mdp = new MimeBodyPart();//新建壹個存放信件內容的BodyPart對象

mdp.setContent(content,"text/html;charset=gb2312");

mul.addBodyPart(mdp);//將含有信件內容的BodyPart加入到MimeMultipart對象中

//設置信件的附件

mdp = new MimeBodyPart();//新建壹個存放附件的BodyPart

DataHandler handler = new DataHandler("JAVAMAIL附件測試","text/plain;charset=gb2312");//新建壹個DataHandler對象,並設置其內容、格式和編碼方式

mdp.setFileName("mrsoft");//可以和源文件名不壹致

mdp.setDataHandler(handler);

mul.addBodyPart(mdp);

message.setContent(mul);//把mul作為消息對象的內容

message.saveChanges();

Transport transport = sess.getTransport("smtp");

transport.connect("smtp."+server,from_mail,from_psd);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

out.println("附件發送成功!");

}catch(Exception ex){

out.print("郵件發送失敗,原因可能是:<ul>");

out.println(ex.getMessage());

}

%>

4.郵件群發

將收件人的地址設置為tomail+i的形式,利用For循環向這些地址發送郵件,以實現群發的目的。

利用Address類設置郵件信息的收件人和發件人信息,在創建了郵件地址類後,通過message的setFrom()方法設置郵件的發件人,代碼如下:

message.setFrom(from_mail);

設置收件人地址時使用setRecipient()方法設置收信人地址,代碼如下:

message.setRecipient(type,address);

參數type為收件人類型。可以使用以下3個常量來區分收件人的類型:

1)Message.RecipientType.TO--發送。

2)Message.RecipientType.CC--抄送。

3)Message.RecipientType.BCC--暗送。

說明:在日常的使用中,經常會用到抄送和暗送這兩種形式的郵件發送。抄送和暗送雖然都是將壹封E-mail同時發送到多個信箱,但是它們之

間有壹定的區別的,其區別在於暗送隱藏了其他抄送人的地址,只讓收信人看到自己的收信地址,可以起到保密和預防垃圾郵件的作用。

實現過程:

<%@ page import="java.io.*"%>

<%@ page import="java.util.*"%>

<%@ page import="javax.mail.*"%>

<%@ page import="javax.mail.internet.*"%>

<%@ page import="javax.activation.*"%>

<%

try{

int i = 1;

for(i=1;i<4;i++){

request.setCharacterEncoding("gb2312");

String from = request.getParameter("from_mail");

String to = request.getParameter("tomail"+i);

String subject = request.getParameter("subject");

String messageText = request.getParameter("message");

String password = request.getParameter("password");

String S = request.getParameter("from_mail");

int n = S.indexOf('@');

int m = S.length();

String server = S.substring(n+1,m);

//建立郵件會話

Properties pro = new Properties();

pro.put("mail.smtp.host","smtp."+server);

pro.put("mail.smtp.auth","true");

Session sess = Session.getInstance(pro);

sess.setDebug(true);

MimeMessage message = new MimeMessage(sess);//新建壹個消息對象

InternetAddress from_mail = new InternetAddress(from);//設置發件人

message.setFrom(from_mail);

//設置收件人

InternetAddress to = new InternetAddress(to);

message.setRecipient(Message.RecipientType.TO,to_mail);

message.setSubject(subject);//設置主題

message.setText(messageText);//設置內容

message.setSentDate(new Date());//設置發送時間

message.saveChanges();//保存郵件信息

Transport transport = sess.getTransport("smtp");

transport.connect("smtp."+server,from,password);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

if(i==3){

out.print("發送郵件成功");

}

}

}catch(Exception e){

out.print("發送郵件失敗,原因可能是<ul>");

out.println(e.getMessage());

}

%>

5.Spring利用WebService發送手機短信

通過編程實現短信息的發送是壹件比較繁瑣的事情,目前壹般的解決方法是通過計算機和手機的連線,使用手機編程語言編寫相關的短信程序,而這種方法不僅需要耗費時間和精力,還需要有相應的硬件設施,並且必須懂得手機編程的相關知識。可以通過Web Service技術遠程訪問現有的短信發送服務器,並通過調用服務器的方法來發送短信。

技術要點:

利用現有資源:壹個可發送短信的Web Service遠程服務。這個Web Service是新浪網站提供的,它可供用戶直接調用遠程服務來發送消息。這個服務的服務名稱是SMSWS,服務端口是SMSWebServiceSoapPort。在這個遠程服務中提供了壹個發送短消息的方法sendXml()。此方法的定義如下:

public String sendXml(String carrier,String id,String password,String toMobile,String message,String msgtype)

功能:根據用戶給定的參數發送短信到目標用戶的手機中。

參數說明:

sendXml()方法中的6個參數均為String類型,sendXml()方法的返回值也是String類型。以下是sendXml()方法中的6個參數的具體說明。

1)carrier:運營商名稱,具體使用時此參數並沒有什麽具體要求,即這裏面可以隨便輸入,輸入的字符串不會在對方手機中有任何顯示。

2)id:在新浪網上註冊的手機號。使用新浪服務發送手機短信時,需要在新浪網站上進行手機註冊,註冊網址為:。

3)password:在新浪網成功註冊手機後,新浪網所反饋來的密碼。

4)toMobile:對方接收短信的手機號碼。

5)message:所要發送短消息的內容。

6)msgtype:發送短消息的類型,由於發送的不是彩信,所以輸入Text。

調用sendXml()方法需在Spring中配置JaxRpcPortProxyFactoryBean的實例,然後定義包含此方法的接口,Spring會自動獲得遠程服務的接口。

實現過程:

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

SMSWebService sendSms = (SMSWebService)ac.getBean("helloWorldService");

String carrier = "lzwsky";

String id = userid.getText();

String password = passwordField.getText();

String toMobile = toMobileField.getText();

String message = messageField.getText();

String msgtype = "Text";

sendSms.sendXml(carrier,id,password,toMobile,message,msgtype);