2006年10月24日
#
--sunfruit
在Linux Enterprise 5安裝Oracle的時候有時候會報錯例如“makefile '/oracle/product/10.2.0/db_1/rdbms/lib/ins_rdbms.mk' 的目標 'all_no_orcl' 時出錯”
經過多次測試是缺少相關的系統包文件,至少我的環境中確實是這樣,只要是安裝了下面的包文件,這個錯誤可以避免(版本號在不同環境中略有不同)
compat-libstdc++-33-3.2.3-61
compat-libstdc++-296-2.96-138
gcc-4.1.1-52.el5
gcc-c++-4.1.1-52.el5
glibc-2.5-12
glibc-common-2.5-12
glibc-devel-2.5-12
glibc-headers-2.5-12
libgcc-4.1.1-52.el5
make-3.81-1.1
binutils-2.17.50.0.6-2.el5
openmotif-2.3.0-0.3.el5
以上的安裝包由于在安裝Linux的選擇的包以及具體的環境不同可能,可能有些不需要,不過如果出現了ins_rdbms.mk的錯誤,可以按照這個方法嘗試一下
注:以上的安裝在Linux Enterprise 5的安裝盤中都包含,不需要額外在網上下載
-sunfruit
如果在安裝Oracle10g的時候沒有選擇字符集,則按照下面的3部進行字符集的修改就可以完全正常的使用Oracle10g(注:關于下面的1、2、3均是轉貼,后面添加了個人在使用的時候一些心得)
1、檢查服務器上Oracle數據庫的字符集
sqlplus /nolog
SQL> connect / as sysdba
連接成功.
SQL> desc props$
列名 可空值否 類型
------------------------------- -------- ----
NAME NOT NULL VARCHAR2(30)
VALUE$ VARCHAR2(2000)
COMMENT$ VARCHAR2(2000)
SQL> col value$ format a40
SQL> select name,value$ from props$;
NAME VALUE$
------------------------------ -------------------------
DICT.BASE 2
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_CALENDAR GREGORIAN
NLS_RDBMS_VERSION 7.3.4.0.0
GLOBAL_DB_NAME ORACLE.WORLD
EXPORT_VIEWS_VERSION 3
NLS_CHARACTERSET和NLS_CHAR_CTERSET這個參數應該是ZHS16GBK,如不是,改為它。
SQL*Plus中修改方法:
SQL> update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
2、確認字符集是否修改的不徹底。
SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
DECODE(TYPE#, 1,
DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),
9,
DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112,
DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
FROM SYS.COL$
WHERE CHARSETFORM IN (1, 2)
AND TYPE# IN (1, 9, 96, 112);
3、如果上面的查詢的確顯示有多個字符集的設定,則進行如下處理:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
--INTERNAL_USE是沒有寫在文檔中的參數,用以強制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SHUTDOWN IMMEDIATE;
STARTUP;
-- 再次啟動數據庫一遍
SHUTDOWN IMMEDIATE;
STARTUP;
**************注意****************
本人在使用上面的方法設置以后Oracle10g可以正常使用,在導入dmp,sql文件的時候則需要在Linux中做如下設置
sql文件,dmp文件在導入oracle的時候需要設置字符集
export LANG=zh_CN.GBK //這個是linux的字符集設置
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK //這個是oracle的字符集設置
--sunfruit
在applet上疊加層有2種方式
第一:使用iframe的方式
第二:使用window.createPopup();方式
<div></div>的方式我是沒有試成功,無論如何設置,div都在applet的下面,要是哪位實驗成功了,經驗也共享一下
由于window.createPopup()主要用于創建右鍵菜單,由于其的一些特性,例如在其他地方點擊,該window.createPopup()對象消失,所以疊加層方式使用window.createPopup()并不合適,使用iframe制作疊加層的效果更好更好
效果圖如下
演示:
http://www.fruitres.cn/applet.jsp,可以從該演示頁直接下載js代碼,或者到代碼下載頁下載
代碼下載:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1084563770&number=0
更多下載:
http://www.fruitres.cn/
--sunfruit
代碼演示了基于ArcIMS開發包進行地圖開發的基礎方法
代碼不是單獨的可執行類,所以只看private void initMap()方法和public BufferedImage render()方法即可。MapBoundModel不用深究可以理解為等同Envelope類即可
在確定以下三個值
private String host = "172.17.8.99";
private int port = 5300;
private String servicename = "sde";
設置正確并且調用refresh();方法也沒有異常拋出,但是getStream();返回null值得時候,則需要調整AXL文件添加<OUTPUT method="stream"/>
重新發布,具體AXL內容請注冊后下載加密附件查看
查看代碼直接下載demo文件即可
地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1257242391&number=0
更多下載:
http://www.fruitres.cn
--sunfruit
Geotools是一個開源的Java GIS工具包,可利用它來開發符合標準的地理信息系統。Geotools提供了OGC(Open Geospatial Consortium)規范的一個實現來作為他們的開發
代碼演示了基于GeoTools開源包進行地圖開發的基礎方法
代碼不是單獨的可執行類,所以只看private void init()方法和public BufferedImage render()方法即可。MapBoundModel不用深究可以理解為等同Envelope類即可
直接下載demo文件即可
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=627152979&number=0
更多下載:
http://www.fruitres.cn
--sunfruit
3sNews最新消息,微軟現在也已經成為OGC主要成員之一,OGC組織也對微軟的加入感到高興,他們最需要做的事情當然是把Virtual Earth 和 SQL Server 2008納入OpenGIS兼容標準.微軟是隨Google之后加入OGC協會的。而2大巨頭的加入也標志著空間信息產業已進入發展的快車道,逐漸成為IT主流。
Google Earth的KML文件格式是開放地理協會的最佳應用之一,這一協會包含345個成員,涵蓋公司、政府機構和大學等角色,他們的目標是建立一個OpenGIS標準.2007年春季,Google遞交了Keyhole Markup Language (KML 2.1)--Google Earth的最新格式,通過了OGC的驗證,很快,它在世界范圍內引起了廣泛的興趣,OGC也將他們加入了 -- 地理標示語言(GML)中.
原貼:http://www.3snews.net/index.php/action_viewnews_itemid_16707.html
--sunfruit
這是一個自定義圖層的演示程序,演示向自定義圖層添加POI、修改自定義圖層中的POI、隱藏/顯示自定義圖層,關于圖層和POI的定義參考原來發布的例子
通過這個demo可以了解數據部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本應用,所以不提供源代碼
Swing+Graphics的用法請參考原來發布的作品
《基本繪圖演示源代碼,繪制矩形》
《JAVA開發的俄羅斯方塊源代碼》
JDK 1.5.0
功能:放大、縮小、平移
地圖底圖圖層控制
自定義圖層控制
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=2087703113&number=0
更多下載:
http://www.fruitres.cn/
--sunfruit
使用MapInfo地圖引擎的自定義圖層的代碼
主要思路是自己建立系統圖層,該圖層和MapInfo引擎圖層無關(關于MapInfo引擎圖層控制請參考原來發布的例子),例如建立自己的ATM機圖層,要求可以控制顯示、隱藏ATM機圖層。那么需要建立一個圖層類和一個ATM機類,當然最好是接口的設計,這樣在2D繪制的時候可以很容易的進行擴展添加其他的圖層
注:不包含地圖數據和Lib包
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1367471068&number=0
更多下載:
http://www.fruitres.cn/
--sunfruit
上次發布了一個使用MapInfo地圖引擎進行圖層控制源代碼,這次照例寫了一個java程序來演示圖層控制
通過這個demo可以了解數據部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本應用,所以不提供源代碼
Swing+Graphics的用法請參考原來發布的作品
《基本繪圖演示源代碼,繪制矩形》
《JAVA開發的俄羅斯方塊源代碼》
JDK 1.5.0
功能:放大、縮小、平移
地圖底圖圖層控制
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=842314737&number=0
更多下載:
http://www.fruitres.cn
--sunfruit
使用MapInfo地圖引擎控制地圖圖層的代碼
該代碼只是對地圖引擎底圖數據圖層的控制,對于自定義圖層和添加新的圖層,以后會出相關的代碼
注:不包含地圖數據和Lib包
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
直接下載demo文件即可
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=196483354&number=0
更多下載:
http://www.fruitres.cn/
--sunfruit
Oracle® Spatial
User’s Guide and Reference
10g Release 2 (10.2)
非常好的Oracle10g Spatial(10.2)的指南和參考文檔
英文的
目錄有3部分20多個章節,這里只節選了第二章節的目錄
2 Spatial Data Types and Metadata
2.1 Simple Example: Inserting, Indexing, and Querying Spatial Data..... 2-1
2.2 SDO_GEOMETRY Object Type ...... 2-5
2.2.1 SDO_GTYPE.......... 2-5
2.2.2 SDO_SRID.......... 2-7
2.2.3 SDO_POINT .......... 2-7
2.2.4 SDO_ELEM_INFO......... 2-7
2.2.5 SDO_ORDINATES ........ 2-10
2.2.6 Usage Considerations ......... 2-11
2.3 SDO_GEOMETRY Methods......... 2-11
2.4 SDO_GEOMETRY Constructors........ 2-13
2.5 Geometry Examples........ 2-14
2.5.1 Rectangle......... 2-14
2.5.2 Polygon with a Hole......... 2-15
2.5.3 Compound Line String ....... 2-17
2.5.4 Compound Polygon ......... 2-19
2.5.5 Point........... 2-20
2.5.6 Oriented Point .......... 2-21
2.5.7 Type 0 (Zero) Element......... 2-23
2.5.8 Several Geometry Types........ 2-25
2.6 Geometry Metadata Views ........ 2-29
2.6.1 TABLE_NAME......... 2-30
2.6.2 COLUMN_NAME......... 2-30
2.6.3 DIMINFO........ 2-30
2.6.4 SRID........... 2-31
2.7 Spatial Index-Related Structures ....... 2-31
2.7.1 Spatial Index Views ....... 2-31
2.7.1.1 xxx_SDO_INDEX_INFO Views....... 2-31
2.7.1.2 xxx_SDO_INDEX_METADATA Views..... 2-32
2.7.2 Spatial Index Table Definition ....... 2-34
2.7.3 R-Tree Index Sequence Object ....... 2-35
2.8 Unit of Measurement Support ........ 2-35
直接下載demo文件即可
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1500381985&number=0
更多下載:
http://www.fruitres.cn
--sunfruit
前一段時間寫了一個基于MapInfo地圖引擎生成地圖圖片的例子,這次寫了一個java程序來使用MapInfo地圖引擎瀏覽地圖,可以看到加載地圖數據以后,進行放大、縮小、平移的操作,拋去網絡因素,速度方面還是可以接受的
通過這個demo可以了解數據部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本應用,所以不提供源代碼
Swing+Graphics的用法請參考原來發布的作品
《基本繪圖演示源代碼,繪制矩形》
《JAVA開發的俄羅斯方塊源代碼》
JDK 1.5.0
功能:放大、縮小、平移
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
下載地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=254133506&number=0
更多下載:http://www.fruitres.cn/
-sunfruit
使用MapInfo地圖引擎生成地圖圖片的代碼,不包含地圖數據和Lib包
直接下載demo文件即可
參考MapXtremeJava48_DG_CHS.pdf,在MapInfo網站下載,或是安裝開發包以后在文檔目錄中提供
JDK1.5
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=447120696&number=0
更多下載:
http://www.fruitres.cn/
--sunfruit
WINXP中選擇多個磁盤進行碎片整理雖然bux一個批命令文件,可以順序執行多個磁盤的碎片整理工作,這樣雖然不能在WIN XP中選擇多個磁盤進行碎片整理,利用這個方法也可以一次執行多個磁盤的碎片整理,比較實用
下載地址:
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1942443612&number=0
更多資料:
http://www.fruitres.cn/
--sunfruit
該文檔非常好的Oracle維護學習文檔
文檔目錄如下
監控SQL
常用戶用SQL
查詢表結構
表空間使用狀況
查詢某個模式下面數據不為空的表
客戶端主機信息
安裝Oracle以后,經常使用的修改表空間的SQL代碼
查看回滾段名稱及大小
PL/SQL入門教程
在from后面使用變量
Oracle常用數據字典
在Oracle中實現數據庫的復制
SQL*PLUS環境輸入'&字符'的方法
簡說創建用戶
簡說Oracle啟動及關閉數據庫實例
簡說Oracle數據庫導出(exp)/導入(imp)
實例:Oracle導出Excel文件
實例:Oracle導出HTM文件
查看數據庫保留字
數據字典及某些字段意義
下載地址
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=244294537&number=0
更多資料
http://www.fruitres.cn/
--sunfruit
源代碼四個文件,在這個DEMO中可以看到
如何使用2D組件,如何把JPanel做為畫板使用,如何使用Canvas替代JPanel,如何設置2D組件的線寬
這個只是針對像入門的新手,高手就不需要看了,免得扔雞蛋
下載地址
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1016162856&number=0
更多工具和文檔請到
http://www.fruitres.cn/
--sunfruit
將Oracle表結構導出成Html頁面的工具
1.0.4
增加了導出觸發器、存儲過程、函數的功能,并且修改了不能導出KEYS全部類型的BUG
1.0.3
增加了導出Sequences、View的功能,并且導出界面默認導出到安裝文件夾中的export目錄中
1.0.2
增加了導出KEYS、INDEX的功能
1.0.1
增加了導出完畢以后直接點擊打開文件夾、打開文件的查看方式,并且支持Linux/Win 平臺
1.0.0
導出為html文件,導出完畢后直接查看index.html文件即可。導出的內容包括各個表的名稱索引和注釋以及表中各個字段的明細和注釋
下載地址
http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=942025602&number=0 下載版本1.0.4
更多工具和文檔請到
http://www.fruitres.cn/
--sunfruit
設置圖片的每個象素Alpha,使得圖片透明,核心代碼如下
private void setAlpha(ByteArrayOutputStream os) {
/**
* 增加測試項
* 讀取圖片,繪制成半透明
*/
try {
ImageIcon imageIcon = new ImageIcon(os.toByteArray());
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight()
, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
g2D.drawImage(imageIcon.getImage(), 0, 0,
imageIcon.getImageObserver());
//循環每一個像素點,改變像素點的Alpha值
int alpha = 100;
for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
int rgb = bufferedImage.getRGB(j2, j1);
rgb = ( (alpha + 1) << 24) | (rgb & 0x00ffffff);
bufferedImage.setRGB(j2, j1, rgb);
}
}
g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
//生成圖片為PNG
ImageIO.write(bufferedImage, "png", new File(圖片路徑));
}
catch (Exception e) {
e.printStackTrace();
}
}
--sunfruit
在openConnection之前加上
Properties prop = System.getProperties();
System.getProperties().put("proxySet","true");
// 設置http訪問要使用的代理服務器的地址
prop.setProperty("http.proxyHost","xxxxxxx");
// 設置http訪問要使用的代理服務器的端口
prop.setProperty("http.proxyPort","xxxxx");
然后并不像有的貼子說的那樣添加
prop.setProperty("http.proxyUser","xxxxxxxx");
prop.setProperty("http.proxyPassword","xxxxx");
添加這樣的內容是不行的,而是將"username:password"進行base64編碼,具體代碼如下
String authentication = "username:password";
String encodedLogin = new BASE64Encoder().encode(authentication.getBytes());
httpurlconnection.setRequestProperty("Proxy-Authorization", " Basic " + encodedLogin);
注意BASE64Encoder().encode(authentication.getBytes());這里不能使用BASE64Encoder().encodeBuffer(authentication.getBytes())否則報錯
具體原因參考sun公布的JDK BUG , Bug ID: 4615330
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615330
??? --sunfruit
??? 前一段時間發了一個“
[原創]JAVAMAIL發送郵件正文是html格式并且顯示圖片還帶有附件的郵件”的文章,后來經過深入的使用該功能發現幾個要點說明如下:
????第一:正文必須第一個添加到Multipart對象中
??? 第二:IMGX? X是序號,該序號必須從1開始,并且只能為數字
??? 以上兩點缺少一點都不會成功
??? 另:ByteArrayDataSource? 這個類在舊的javamail開發包中沒有,需要新的javamail開發包
??? --sunfruit
??? 有三個壓縮包需要下載,下載以后放在同一個目錄中解壓即可
????
下載包1????
下載包2????
下載包3
??? --sunfruit
???沒有什么說的,源代碼如下
public void sendMail(int id) {
??????? //數據初始化
??????? Transport transport; //發郵件時使用
??????? String part = GetResource.getXMLValue("mail_port"); //端口
??????? String mailhost = GetResource.getXMLValue("mail_server"); //服務器
??????? String user = GetResource.getXMLValue("mail_user"); //用戶名
??????? String password = GetResource.getXMLValue("mail_password"); //密碼
??????? String from = GetResource.getXMLValue("mail_from"); //發件mail
??????? String strname = GetResource.getXMLValue("mail_strname"); //在地址欄上顯示的名字
??????? String to = GetResource.getXMLValue("mail_to"); //收件人
??????? String cc = ""; //抄送人
??????? String bcc = ""; //密送人
??????? String title = GetResource.getXMLValue("mail_title"); //標題
??????? byte[] bytes = null;
??????? try {
??????????? bytes = FileIO.readFile(GetResource.getXMLValue("mail_contentpath")); //正文
??????? } catch (IOException ex) {
??????????? log.error("",ex);
??????? }
??????? String fromat = GetResource.getXMLValue("mail_fromat");
??????? //獲得下載需要的key
??????? byte[] bkeydes=null;
??????? try {
??????????? bkeydes=FileIO.readFile(GetResource.getXMLValue("附件地址"));
??????? } catch (IOException ex) {
??????????? log.error("",ex);
??????? }
??????? try {
??????????? Properties props = System.getProperties(); //獲得系統屬性
??????????? props.put("mail.smtp.host", mailhost); //設置SMTP主機
??????????? props.put("mail.smtp.auth", "true"); //設置身份驗證為真,若須身份驗證則必須設為真
??????????? //獲得郵件會話對象
??????????? Session session = null;
??????????? //需要驗證
??????????? session = Session.getDefaultInstance(props,
???????????????????????????????????????????????? new SmtpAuthenticator(user,
??????????????????? password));
??????????? //創建MIME郵件對象
??????????? MimeMessage mimeMsg = new MimeMessage(session);
??????????? //設置發信人
??????????? if (strname != null && !strname.equals("")) {
??????????????? mimeMsg.setFrom(new InternetAddress(from, strname));
??????????? } else {
??????????????? mimeMsg.setFrom(new InternetAddress(from));
??????????? }
??????????? //設置收信人
??????????? if (!to.equals("")) {
??????????????? mimeMsg.setRecipients(Message.RecipientType.TO,
????????????????????????????????????? InternetAddress.parse(to));
??????????? }
??????????? //設置抄送人
??????????? if (!cc.equals("")) {
??????????????? mimeMsg.setRecipients(Message.RecipientType.CC,
????????????????????????????????????? InternetAddress.parse(cc));
??????????? }
??????????? //設置暗送人
??????????? if (!bcc.equals("")) {
??????????????? mimeMsg.setRecipients(Message.RecipientType.BCC,
????????????????????????????????????? InternetAddress.parse(bcc));
??????????? }
??????????? //設置郵件主題
??????????? sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//??????????? mimeMsg.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) +
//?????????????????????????????? "?=");
??????????? mimeMsg.setSubject(title, "GBK");
??????????? //設置郵件內容
??????????? //mimeMsg.setText(content, "gb2312");
??????????? //發送日期
??????????? mimeMsg.setSentDate(new Date());
??????????? /*******************附件 begin××××××××××××××××××××××××*/
??????????? BodyPart mbp = null; //正文
??????????? //MimeBodyPart mbp1 = null; //附件
??????????? mbp = new MimeBodyPart();
??????????? //設置郵件正文格式(html/text)
??????????? if (fromat.equals("0") || fromat.equals("")) {
??????????????? //普通格式
??????????????? mbp.setText(new String(bytes,"GBK"));
??????????? } else {
??????????????? //網頁格式
??????????????? mbp.setDataHandler(new DataHandler(new String(bytes,"GBK"),
??????????????????????? "text/html;charset=gb2312"));
??????????? }
??????????? //!!!!注意必須為new MimeMultipart("related"); 這樣的實例化才能發送html正文顯示圖片的郵件 "related"
??????????? //new MimeMultipart(); 這樣實例化則不能發送html正文顯示圖片的郵件 只可以發送其他的郵件
??????????? Multipart mp = new MimeMultipart("related");
??????????? if (mbp != null)
??????????????? mp.addBodyPart(mbp); //正文
??????????? //附件key.des
??????????? BodyPart messageBodyPart = new MimeBodyPart();
??????????? ByteArrayDataSource fileds = new ByteArrayDataSource(bkeydes,"application/octet-stream");
??????????? messageBodyPart.setDataHandler(new DataHandler(fileds));
??????????? //解決附件中文問題
??????????? //mbp1.setFileName(fileds.getName(),"gb2312");
??????????? messageBodyPart.setFileName(MimeUtility.encodeWord("key.des", "GB2312", null));
??????????? mp.addBodyPart(messageBodyPart);
??????????? //附件 圖標
??????????? messageBodyPart = new MimeBodyPart();
??????????? bytes=FileIO.readFile(GetResource.getXMLValue("img_logo"));
??????????? fileds = new ByteArrayDataSource(bytes,"application/octet-stream");
??????????? messageBodyPart.setDataHandler(new DataHandler(fileds));
??????????? //解決附件中文問題
//??????????? messageBodyPart.setFileName("fruitrsource_touming.jpg");
//??????????? messageBodyPart.setHeader("Content-ID", "fruitrsource_touming");
??????????? messageBodyPart.setFileName("1.jpg");
??????????? //!!!!注意這里是"<IMG1>" 帶有尖括號 而在正文的html里面則是src="cid:IMG1"
??????????? messageBodyPart.setHeader("Content-ID", "<IMG1>");
??????????? mp.addBodyPart(messageBodyPart);
??????????? // 添加 Multipart到Message中
??????????? mimeMsg.setContent(mp);
??????????? mimeMsg.saveChanges();
??????????? transport = session.getTransport("smtp");
??????????? transport.connect(mailhost, Integer.parseInt(part), user, password);
??????????? //發送郵件
??????????? //transport.send(mimeMsg, mimeMsg.getAllRecipients());
??????????? //transport.send(mimeMsg);
??????????? transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
??????????? //System.out.println("mail send!");
??????????? transport.close();
??????? }
??????? catch (Exception e) {
??????????? e.printStackTrace();
??????? }
??? }
class SmtpAuthenticator extends Authenticator {
??????? //SMTP身份驗證
??????? public SmtpAuthenticator(String username, String password) {
??????????? this.username = username;
??????????? this.password = password;
??????? }
??????? public PasswordAuthentication getPasswordAuthentication() {
??????????? return new PasswordAuthentication(this.username, this.password);
??????? }
??????? String username = null;
??????? String password = null;
??? }