2009年7月29日 星期三

java mail sample

文章引用來源:http://hyh.mis.dwu.edu.tw/jsp/mail.htm
要先下載並安裝java mail 元件.
http://developers.sun.com/downloads/



下面是java mail 的範例

InternetAddress[] address = null;
request.setCharacterEncoding("big5");
String mailserver = "192.168.0.101"; // <=此處所設必須和寄件人的信箱同一台伺服器,
String From = request.getParameter("From"); 並且必須考慮伺服器是否會mail-rely
String to = request.getParameter("To");
String Subject = request.getParameter("Subject");
String messageText = request.getParameter("Message");

boolean sessionDebug = false;

try {
// 設定所要用的Mail 伺服器和所使用的傳送協定
java.util.Properties props = System.getProperties();
props.put("mail.host",mailserver);
props.put("mail.transport.protocol","smtp"); // <=設定所使用的protocol為SMTP(Small Mail Transfer Protocol)
// 產生新的Session 服務
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
// 設定傳送郵件的發信人
msg.setFrom(new InternetAddress(From));
// 設定傳送郵件至收信人的信箱
address = InternetAddress.parse(to,false);
msg.setRecipients(Message.RecipientType.TO, address);
// 設定信中的主題
msg.setSubject(Subject);
// 設定送信的時間
msg.setSentDate(new Date());
// 設定傳送信的MIME Type
msg.setText(messageText);
// 送信
Transport.send(msg);
out.println("郵件己順利傳送");
}
catch (MessagingException mex) {
mex.printStackTrace();
}

2009年7月2日 星期四

“Warning: Cannot send session cookie - headers already sent...”或者“Cannot add/modify header information - headers already sent...” 錯誤

大家常看到的 錯誤碼 “Warning: Cannot send session cookie - headers already sent...”或者“Cannot add/modify header information - headers already sent...”

1. 何謂 HEADER :

請參考這篇文章

http://bbs.ecstart.com/viewthrea ... 1%AA%BA%A8%CF%A5%CE

而 PHP 中 SET_COOIE 和 SESSION_START 上方 通常都是不準許 ECHO 出 字串的

原因是因為 它們不容許 在插入 HEADER (表頭) 內容時 , 程式出現 了 HTML 或 空白 或其它字元 .

2. 如何知道 執行 SET_COOKIE 和 SESSION_START 時 出現了 HEADER 以為的語法 :

請參考這篇文章 :

http://tw.php.net/manual/en/function.headers-sent.php

3. 解決方案 :

A. 從程式裡把出現在header前的字元拿掉 ( 慢慢找 )

B. ob_start() << 利用 OB_START ....

簡單的說 OB_START 就是將 要吐出來的內容 先放到記憶體 等記憶體放滿了才會吐出來 .

所以 它會將預吐出來的資料先放入 BUFFER 等 BUFFER 滿了 才會一口氣吐出來 , 這樣就可以避免 HEADER 中間被插入其它字串或字元.

這個解法上述有人提過了 ,

但是你好像還會發生 , 所以我在猜 , 還沒有進入 PHP BUFFER 的控制前 就有東西吐出來了 .

所以上述也有人提到 可能是 BOM 或是 APACHE 本身不知吐了什麼東西出來.

到此都只是猜測...

詳細 OB_START 介紹 : http://bbs.ecstart.com/viewthrea ... ob%5C_start%2BFIEND

C. 將 php.ini 的 output_buffering 改成 : ( BUFFER 上述己跟大家介紹過觀念這裡不多加描述 ); Output buffering allows you to send header lines (including cookies) even

; after you send body content, at the price of slowing PHP's output layer a

; bit. You can enable output buffering during runtime by calling the output

; buffering functions. You can also enable output buffering for all files by

; setting this directive to On. If you wish to limit the size of the buffer

; to a certain size - you can use a maximum number of bytes instead of 'On', as

; a value for this directive (e.g., output_buffering=4096).

output_buffering = 4096
複製代碼D. 直接改 HTTPD SERVER :

AllowOverride All

如果你是租 主機 ... 在 .htaccess 內加入 :

AllowOverride All
PHP_FLAG output_buffering On


###############################

上述資料出處:
http://bbs.ecstart.com/thread-30347-1-4.html