หรือที่เจอมาหมาดๆ คือ ทางโฮสได้ปิดคำสั่ง mail() ไปซะอย่างนั้น แล้วเราจะทำอย่างไรดี ในที่นี้ให้ลืมไปเลยครับ ที่ลูกค้าหรือผู้ชมเว็บไซต์จะส่งเมลล์กลับมาหาเมล์เดิมเรา เช่นเราอาจมีเมลเดิมเป็น sales@hotmail.com หรือไม่ก็ sales@yahoo.com เพราะในบทความนี้นั้น เราจะส่งเมลล์แบบส่งไปมาระหว่างเว็บเมลล์เราเองครับ
เช่นเว็บเราคือ http://www.gurunumber.com/ เราก็สร้างบัญชีเมลล์จากเว็บเมลล์เราขึ้นมาเช่น sales@gurunumber.com แล้วก็สร้างบัญชีผู้รับเป็น customer@gurunumber.com ก็เป็นอันเสร็จครับ ส่วนโค๊ดนั้นคือ
<?php
function
authMail(
$from
,
$namefrom
,
$to
,
$nameto
,
$subject
,
$message
)
{
/*?your configuration here?*/
$smtpServer
=
"mail.gurunumber.com"
;
$port
=
"25"
;
$timeout
=
"30"
;
$username
=
"sales@
gurunumber.com"
;
$password
=
"password"
; // พาสเวริ์ดเมลล์
$localhost
=
"1.1.1.1"
; // ไอพีของเว็บเมลล์
$newLine
=
"\r\n"
;
$secure
= 0;?
/*?you shouldn't need to mod anything else */
//connect to the host and port
$smtpConnect
=
fsockopen
(
$smtpServer
,
$port
,
$errno
,
$errstr
,
$timeout
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
if
(
empty
(
$smtpConnect
))
{
$output
=
"Failed to connect: $smtpResponse"
;
return
$output
;
}
else
{
$logArray
[
'connection'
] =
"Connected to: $smtpResponse"
;
}
//say HELO to our little friend
fputs
(
$smtpConnect
,
"HELO $localhost"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'heloresponse'
] =
"$smtpResponse"
;
//start a tls session if needed
if
(
$secure
)
{
fputs
(
$smtpConnect
,
"STARTTLS"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'tlsresponse'
] =
"$smtpResponse"
;
//you have to say HELO again after TLS is started
fputs
(
$smtpConnect
,
"HELO $localhost"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'heloresponse2'
] =
"$smtpResponse"
;
}
//request for auth login
fputs
(
$smtpConnect
,
"AUTH LOGIN"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'authrequest'
] =
"$smtpResponse"
;
//send the username
fputs
(
$smtpConnect
,
base64_encode
(
$username
) .
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'authusername'
] =
"$smtpResponse"
;
//send the password
fputs
(
$smtpConnect
,
base64_encode
(
$password
) .
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'authpassword'
] =
"$smtpResponse"
;
//email from
fputs
(
$smtpConnect
,
"MAIL FROM: $from"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'mailfromresponse'
] =
"$smtpResponse"
;
//email to
fputs
(
$smtpConnect
,
"RCPT TO: $to"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'mailtoresponse'
] =
"$smtpResponse"
;
//the email
fputs
(
$smtpConnect
,
"DATA"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'data1response'
] =
"$smtpResponse"
;
//construct headers
$headers
=
"MIME-Version: 1.0"
.
$newLine
;
//$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers
.=
"To: $nameto <$to>"
.
$newLine
;
$headers
.=
"From: $namefrom <$from>"
.
$newLine
;
//observe the . after the newline, it signals the end of message
fputs
(
$smtpConnect
,
"To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n"
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'data2response'
] =
"$smtpResponse"
;
// say goodbye
fputs
(
$smtpConnect
,
"QUIT"
.
$newLine
);
$smtpResponse
=
fgets
(
$smtpConnect
, 4096);
$logArray
[
'quitresponse'
] =
"$smtpResponse"
;
$logArray
[
'quitcode'
] =
substr
(
$smtpResponse
,0,3);
fclose(
$smtpConnect
);
//a return value of 221 in $retVal["quitcode"] is a success
return
(
$logArray
);
}
?>
ส่วนวิธีการใช้งานนั้น ก็ไม่ยาก ใช้แทนคำสั่ง mail() เดิมครับ
เอาอันนี้ไปแทน
$from = "customer@gurunumber.com";
$namefrom = "suched"; // ชื่อยูสเซอร์ที่กรอกข้อมูลเพื่อส่งเมลล์มาให้เรา หรือชื่อลูกค้า
$to = "sales@gurunumber.com";
$nameto = "me"; // ชื่อเรา
$subject = "สวัสดีครับ ต้องการติดต่อคุณ ... sale";
$message = "ข้อความเนื้อหา";
authMail(
$from
,
$namefrom
,
$to
,
$nameto
,
$subject
,
$message
);
แค่นี้เองครับ การใช้การรับส่งเมลล์แบบ authentication นั้นยังช่วยสร้างความปลอดภัยในระดับนืงให้กับโฮสอีกด้วยครับ