AdminTalk - Talk to Learn

Navigation
Go Back   AdminTalk - Talk to Learn > Webmaster Area > Programming Language > Other
Other Trao đổi về những vấn đề khác trong công nghệ phần mềm như Analyzing, Designing, Defining Solution Architures…

Đề mục chính

Cấu trúc diễn đàn
Thông tin tổng hợp
Thông báo và quy định chung
Đóng góp ý kiến
Những bài viết có giá trị
Tin tức công nghệ
•• Tin tức công nghệ thông tin
•• Doanh Nghiệp & Người Tiêu Dùng
Premium Server, Hosting Support
Web Hosting / Domain
•• Kiến thức cơ bản về Web Hosting/Domain
•• Plesk - CPanel
Server / VPS
•• Kiến thức cơ bản Server - VPS
•• Server Review/ Hardware
•• Mail Server - AntiSPAM
Virtuozzo - VMWare - HyperV
•• For Windows
•• For Linux
Security
•• Mạng Wan - Lan
•• Internet - Virus - Hacker
VoIP
•• Kiến Thức Cơ Bản VoIP
•• Phần Cứng VoIP
•• Phần Mềm VoIP
•• Nhà cung cấp VoIP
Server Operating System
Linux Server
Windows Server 200x
Computer Supports and Discussion
Operating System
•• Hệ điều hành Linux
•• Hệ điều hành Windows
•• Hệ điều hành Mac
•• Hệ điều hành Chrome
Laptop, Netbook
Hardware
•• Cpu Intel
•• Cpu AMD
•• PSU, Overclocking & Cooling
•• Mainboard & Memory
•• Đồ họa máy tính
•• Kinh nghiệm
Software
•• Linux Apps
•• Windows Apps
Webmaster Area
Webmaster talk
Programming Language
•• HTML & CSS
•• PHP
•• C++ / C#
•• .NET
•• Java
•• Other
Graphic & Mutimedia
SEO (Search Engine Optimization)
Browsers
•• Mozilla Firefox
•• Chrome
•• Internet Explorer
Thủ Thuật Internet
Thương mại điện tử
•• Hình thức thanh toán
•• Giải pháp
HiTech, Mobile, Movies, Music, eBooks, Relax
Tablet PC
•• iPad
Mobile
•• iPhone
•• BlackBerry
•• Others
Movies
•• Download phim HD
•• Download phim DVD
Music
•• Download nhạc Lossless Album
•• Download nhạc Lossless tuyển chọn
eBooks - Tài liệu
•• Tin học - Lập trình
•• Khoa học - Kỹ thuật
•• Ngoại Ngữ
•• Tutorials - Training
•• Kinh tế
•• Thể Loại Khác
Bài học trong cuộc sống
AdminTalk – Talk to You
Introduce Youself
Off topic/ Chatting
Mua bán - Rao vặt - Tuyển dụng
Quảng cáo
Tuyển dụng

Bầu chọn mới nhất
Bạn nghĩ sao về công nghệ USB 3.0 ?

Rất tuyệt! Sẽ sử dụng ngay nếu được bán trên thị trường: 47.37%

Tốt hơn USB 2.0 , nhưng giá có thể mắc hơn nhiều: 42.11%

Bình thường thôi, công nghệ luôn thay đổi mà: 10.53%

Không quan tâm lắm: 0%
Voters: 38. You may not vote on this poll

Thống kê
Đề tài: 10635
Bài gửi: 12199
Thành viên: 20,207
Thành viên tích cực: 82
Xin cùng nhau chào đón thành viên mới nhất: buixuantu
Kỷ lục: 624 người đã ghé thăm 17/11/2010 lúc 06:16 AM.
Thành viên mới:
hôm nay
- buixuantu
hôm nay
- baophuc0711
Hôm qua
- ddvtien
Hôm qua
- thanhtam1028
Hôm qua
- goodhealthvn1
Hôm qua
- honghobao286
07/02/2012
- condau
07/02/2012
- timlaibautroi7408
07/02/2012
- NguyenLien
07/02/2012
- quydona

Số người đang xem
View Who's Online Thành viên: 3
Khách: 152
Tổng: 155
Nhóm: 0
Nhóm:  
Thành viên:  aviomobile, aviovn8, lovexinh99
Mở Sổ Bạn Bè

Trả lời
 
LinkBack Ðiều Chỉnh Kiếm Trong Bài Xếp Bài

  #1 (permalink)
Old 01/03/2010, 11:57 PM
Send Email TEXT - HTML và Tiếng VIỆT Unicode PHP

Chip
Admintalk's Staff
can't stop talking
 
Chip's Avatar
 
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Germany
Bài gởi: 4,003
My Mood:
Thanks: 27
Thanked 210 Times in 152 Posts
VP: 0.00
Donate
Send a message via MSN to Chip Send a message via Yahoo to Chip Send a message via Skype™ to Chip
HÀM MAIL() CỦA PHP



Send email trong PHP rất đơn giản, ta chỉ cần dùng duy nhất 1 hàm mail() được PHP cung cấp sẵn là đủ. Cú pháp của hàm mail() như sau:



bool mail(string to, string subject, string message[, string additional_headers])



Các tham số của hàm mail() có ý nghĩa như sau:



* to – địa chỉ người nhận email, là 1 string. Các giá trị hợp lệ của tham số to có dạng như sau:

'user@domain.com'

'user1@domain.com, [Chỉ có thành viên mới thấy links này. ]'

'User Name <user@example.com>'

'User Name 1 <user1@example.com>, User Name 2 <user2@example.com>'

'User Name 1 <user@example.com>, [Chỉ có thành viên mới thấy links này. ], User Name 3 <user3@example.com>'

* subject – tiêu đề của email, là 1 string. Tiêu đề của email không được chứa ký tự xuống dòng (\r hoặc \n).

* message – nội dung email, là 1 string. Nội dung email có thể do nhiều dòng ghép lại với nhau, mỗi dòng được phân cách bằng ký tự \n.

* additional_headers – (tuỳ chọn) dùng để chèn thêm các header vào email. Các header này không nằm trong phần nội dung của email mà dùng để quản lý việc gởi email (ví dụ chèn thêm các trường CC, BCC khi gởi email). Nhiều header có thể cùng ghép lại thành 1 string trong additional_headers, các header được phân cách nhau bằng chuỗi \r\n.







Hàm mail() sẽ trả về giá trị TRUE nếu như email được chấp nhận gởi đi và FALSE trong trường hợp ngược lại.

Lưu ý: Hàm mail() trả về giá trị TRUE không có nghĩa là email sẽ được gởi đến nơi nhận thành công. Giá trị TRUE được trả về chỉ có ý nghĩa là email được server chấp nhận gởi đi, còn khi nào thì email thực sự được gởi, gởi có tới nơi hay không thì chương trình không biết được (như vậy nếu bạn nhập sau địa chỉ người nhận ở tham số To thì sẽ không có cách nào chương trình biết được địa chỉ To có đúng hoặc tồn tại hay không!).



MỘT VÍ DỤ GỞI EMAIL VỚI HÀM MAIL()



Ta hãy tạo 1 chương trình PHP nhỏ đẻ gởi email như sau:



PHP Code:
//nội dung file example1.php

<?php

$from 
'from@domain.com';

$to 'to@domain.com';

$subject 'Example 1: Send simple text email';

$message 'A plain text email.';

$header = &quot;From$fromrnReply-to$from&quot;;

 

if ( 
mail($to$subject$message$header) ) {

    echo &
quot;Email sent to $to!&quot;;

} else {

    echo &
quot;Error occured while sending email to $to!&quot;;

//end if

?>


Lưu chương trình vào file example1.php và chạy thử. Nếu quá trình gởi email thành công, bạn sẽ nhận được câu thông báo “Email sent to [Chỉ có thành viên mới thấy links này. ]!”, nếu có lỗi bạn sẽ nhận được câu thông báo “Error occured while sending email to [Chỉ có thành viên mới thấy links này. ]!”



Lưu ý:



* Nhớ thay [Chỉ có thành viên mới thấy links này. ][Chỉ có thành viên mới thấy links này. ] thành địa chỉ email của bạn trước khi chạy thử chương trình!

* Có thể phải mất tới 5-10 phút email mới tới nơi, và bạn nhớ kiểm tra thư mục Bulk email vì nhiều khi email gởi tới bị để trong mục Bulk.







Trong cú pháp của hàm mail(), tham số additional_headers là tuỳ chọn, tức là bỏ qua cũng được. Tuy nhiên, trên thực tế bạn nên cung cấp tham số additional_headers cho hàm mail() với ít nhất 2 header From và Reply-to. Lý do thì có nhiều, một trong số các lý do phải cung cấp header From và Reply-to là vì nếu phần địa chỉ người gởi (From) là rỗng, các chương trình lọc email có thể cho rằng đây là emai spam và thế là email được tự động chuyển sang “Thùng rác”!.



GỞI HTML EMAIL VỚI HÀM MAIL()



Chúng ta đã gởi được email text với hàm mail(), nhưng nhiều lúc ta cần “trang điểm” màu mè cho nội dung email được bắt mắt hơn. Thử viết 1 chương trình nhỏ gởi email HTML:



PHP Code:
//nội dung file example2.php

<?php

$from 
'from@domain.com';

$to 'to@domain.com';

$subject 'Example 2: Try a simple HTML email';

$message 'A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.';

$header = &quot;From$fromrnReply-to$from&quot;;

 

if ( 
mail($to$subject$message$header) ) {

    echo &
quot;Email sent to $to!&quot;;

} else {

    echo &
quot;Error occured while sending email to $to!&quot;;

//end if

?>


Lưu chương trình vào file example2.php và chạy thử. Email gởi thành công, tới nơi an toàn, nhưng khi mở ra xem thì nội dung email lại như vầy:

A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.

Thế có tức không?



Thực ra bạn chỉ cần sửa lại chương trình “1 chút xíu” là đâu vào đấy ngay:



PHP Code:
//nội dung file example3.php

<?php

$from 
'from@domain.com';

$to 'to@domain.com';

$subject 'Example 3: Send HTML email';

$message 'A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.';

$header = &quot;Content-typetext/htmlrnFrom$fromrnReply-to$from&quot;;

 

if ( 
mail($to$subject$message$header) ) {

    echo &
quot;Email sent to $to!&quot;;

} else {

    echo &
quot;Error occured while sending email to $to!&quot;;

//end if

?>


Lưu chương trình vào file example3.php và chạy thử. Lần này thì nội dung email nhận được như mong muốn:

A HTML email: bold, italic, underline..



Như vậy bạn sẽ nhận thấy rằng gởi HTML email cũng đơn giản không khác gì gởi text email thông thường. Chỉ cần thêm 1 header Content-type: text/html là nội dung email sẽ được hiểu là HTML ngay.



Lưu ý: Riêng phần tiêu đề (subject) của email vẫn phải là text thông thường! Bạn không thể sử dụng mã HTML trong phần tiêu đề (subject) của email được. Vì thực chất phần tiêu đề của email cũng là 1 header đặt biệc chứ không nằm trong phần nội dung chính của email.



GỞI EMAIL VỚI TIẾNG VIỆT UNICODE



Gởi email tiếng Việt Unicode cũng y chang như gởi email HTML vì bản thân HTML đã hỗ trợ Unicode rồi, ta chỉ cần chú ý đặt charset của email cho đúng là được:



PHP Code:
//nội dung file example3.php

<?php

$from 
'from@domain.com';

$to 'to@domain.com';

$subject 'Example 4: Send Unicode email';

$message 'Email tiếng Việt Unicode: <b>in đậm</b>, <i>in nghiêng</i>, <u>gạch chân</u>.';

$header = &quot;Content-typetext/htmlcharset=utf-8rnFrom$fromrnReply-to$from&quot;;

 

if ( 
mail($to$subject$message$header) ) {

    echo &
quot;Email sent to $to!&quot;;

} else {

    echo &
quot;Error occured while sending email to $to!&quot;;

//end if

?>


Lưu chương trình vào file example4.php và chạy thử: email gởi thành công, tới nơi an toàn và khi đọc thì hiển thị…tiếng Ả-rập!!! Có gì sai ở đây chăng?



Thực ra không có gì phải lo lắng cả. Khi gởi email tiếng Việt Unicode bạn cần chú ý một số điểm sau:



* Đặt charset cho email. Charset này phải nên trùng với charset của file mã nguồn PHP và website của bạn. Trong ví dụ ở trên, ta đặt charset cho email là utf-8 thì bạn cũng phải lưu file example4.php lên đĩa với charset là utf-8. Bạn xem mục “LƯU FILE VỚI TIẾNG VIỆT UNICODE” ở bài viết Giới thiệu – Các bước chuẩn bị cần thiết để tìm hiểu thêm về lưu file mã nguồn PHP lên đĩa với charset utf-8.

* Cho dù bạn đã đặt charset đúng rồi, vẫn có thể email không hiển thị đúng tiếng Việt khi đọc! Vì quyền hiển thị email như thế nào là do chương trình email client quyết định. Nếu bạn đọc email bằng Outlook chẳng hạn, thì Outlook sẽ tự động nhận biết charset của email và hiển thị đúng tiếng Việt. Nếu bạn đọc email trên web (như Yahoo, Hotmail…) thì có thể bạn phải tự tay chọn lại Encoding là utf-8 trên trình duyệt vì các web email như Yahoo, Hotmail sẽ dùng charset mặc định của mình và bỏ qua charset được thiết lập trong email.



Và tương tự như khi gởi HTML email, bạn đừng nên ghi tiếng Việt vào phần tiêu đề (subject) của email! Vì như đã nói ở phần trước, tiêu đề (subject) của email cũng là 1 header đặt biệc chứ không nằm trong phần nội dung chính của email.







MỘT SỐ LỖI HAY GẶP VỚI HÀM MAIL()



Email gởi không tới nơi

Hàm mail() trả về giá trị TRUE, địa chỉ đúng, nội dung đúng, nói chung mọi thứ đều đúng nhưng email chờ hoài không thấy tới! Kiểm tra Bulk email cũng không thấy luôn! Lỗi ở đâu hè? Nguyên nhân có thể xảy ra ở 3 chỗ:



* mail server – server của bạn không cho phép account của bạn gởi email, hoặc giới hạn chỉ cho phép gởi số lượng giới hạn email trong 1 khoảng thời gian nào đó. Bạn cần hỏi người quản lý server của bạn về quyền gởi email với PHP trên server.

Nếu vấn đề không phải nằm ở chỗ server không cho phép bạn gởi email, hoặc chính bạn là người quản lý server thì bạn kiểm tra tiếp 1 trong 2 nguyên nhân sau:

* *NIX server (server chạy các hệ điều hành UNIX hoặc Linux) – PHP mặc định sẽ sử dụng lệnh sendmail có sẵn trên hệ thống để gởi email (với tham số -t -i). Mặc định lệnh sendmail sẽ nằm trong /usr/sbin/sendmail hoặc trong 1 thư mục nào đó trong PATH của hệ thống. Nếu trên server của bạn lệnh sendmail nằm ở chỗ khác với thư mục mặc định (ví dụ trên server của bạn sendmail nằm ở /usr/local/secretbin/sendmail) thì bạn có thể làm như sau:

- Tìm và mở file php.ini ra.

- Tìm chuỗi “sendmail”, bạn sẽ thấy 2 dòng tương tự như sau:

; For Unix only. You may supply arguments as well (default: &quot;sendmail -t -i&quot.

;sendmail_path =

- Bạn sửa lại 2 dòng đó như sau:

; For Unix only. You may supply arguments as well (default: &quot;sendmail -t -i&quot.

sendmail_path = /usr/local/secretbin/sendmail -t -i

Nhớ bỏ ký tự chấm phảy ( ở đầu dòng sendmail_path =!

Lưu ý: Cấu hình của PHP tới đây đã đúng và đủ để gởi email trên server *NIX. Tuy nhiên vẫn có thể server không gởi email được! Lỗi lúc này là do bản thân cấu hình của server hoặc quá trình cài đặt và cấu hình chương trình sendmail bị lỗi. Cách kiểm tra nguyên nhân và sửa lỗi nằm ngoài phạm vi của PHP, bạn có thể đặt câu hỏi lên diễn đàn CLB người sử dụng Linux để được giúp đỡ!

* Windows server – Trên Windows, PHP cần phải dùng 1 SMTP server để gởi email. Bạn tìm và mở file php.ini ra, tìm chuỗi sendmail, gần đó bạn sẽ thấy vài dòng như sau:

[mail function]

; For Win32 only.

SMTP = localhost

smtp_port = 25;

Các dòng trên cho ta biết PHP sẽ dùng SMTP server localhost trên port 25 để gởi email. Rất có thể bạn chưa cài đặt và cấu hình đúng 1 SMTP trên localhost để PHP có thể sử dụng và gởi email. Bạn hãy tham khảo bài viết này để cài đặt 1 SMTP server trên localhost và dùng nó để gởi email với PHP.







Nội dung email bị đứt đoạn

Nếu bạn nhận được email nhưng nội dung bị đứt đoạn không đầy đủ thì có thể do 2 nguyên nhân sau:



* Mã HTML trong email bị sai – Nếu bạn gởi email HTML thì bạn nên chú ý kiểm tra cú pháp HTML của nội dung email. Giả sử bạn định gởi email với nội dung:

<b>in đậm</b>

Nhưng chẳng may bạn ghi sai thành <b in đậm</b>

thì khi đọc, email sẽ hiển thị bị sai (có thể là mất chữ, đứt đoạn, v.v…).

* Có 1 dòng chứa 1 dấu chấm (.) ở đầu – Khi bạn gởi email trên Windows dùng SMTP server, nếu nội dung email có 1 dòng nào đó chứa 1 dấu chấm (ký tự .) ở đầu dòng thì ký tự đó sẽ bị bỏ qua, dòng đó sẽ bị bỏ qua, hoặc toàn bộ nội dung email từ dòng đó trở đi sẽ bị bỏ qua. Lý do là vì dòng chứa 1 dấu chấm ở đầu chính là dấu hiệu báo cho SMTP server biết đã kết thúc nội dung của email. Để khắc phục, trước khi gởi email, ta thay thế dấu chấm ở đầu dòng bằng 2 dấu chấm:

$message = str_replace(&quot;\n.&quot;, &quot;\n..&quot;, $message);







CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ



* mail: gởi email.



TÀI LIỆU THAM KHẢO



* PHP Manual: [Chỉ có thành viên mới thấy links này. ]

o Cấu hình và gởi email với PHP: [Chỉ có thành viên mới thấy links này. ][/quote]

Bài viết cùng chủ đề:
Chip vẫn chưa có mặt trong diễn đàn  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Trả Lời Với Trích Dẫn
Trả lời

Bookmarks


Ðang đọc: 1 (0 thành viên và 1 khách)
 
Ðiều Chỉnh Kiếm Trong Bài
Kiếm Trong Bài:

Kiếm Chi Tiết
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt
Trackbacks are Mở
Pingbacks are Mở
Refbacks are Mở

Chuyển đến



Múi giờ GMT. Hiện tại là 09:21 PM.
Powered by: vBulletin - Copyright © 2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.AdminTalk.vn
Powered by vBCMS® 1.2.5 ©2002 - 2012 VinaCIS® Corporation