שליחת דוא"ל באמצעות MIME
פתיחה
פונקציית שליחת הדוא"ל של PHP די מוגבלת, מכיוון שהיא משתמשת בשיטה הישנה של שליחת דוא"ל. היא מאפשרת לשלוח הודעות ASCII פשוטות, וכאשר מנסים לשלוח הודעות בעברית, התוצאה יוצאת בד"כ גרוע.כמו כן, הפונקציית mail() של PHP מוגבלת בעוד כמה דברים:
- אין אפשרות לשלוח קבצי HTML.
- ההודעות לא מקודדות בעברית, אלא בקוד ASCII.
- אין אפשרות לשנות גופנים, קידוד, צבעים וכדומה.
- יש מגבלה על גודל ההודעה ומספר התווים בכל שורה.
עוברים להשתמש ב- MIME
MIME זה ראשי תיבות של Multipurpose Internet Mail Extensions, ובתרגום חופשי לעברית: תוספות רב-תכלתיות לדואר אלקטרוני. שיטה זאת אושרה לשימוש ב- 1992 ואיפשרה לשכלל את הודעות הדוא"ל.השיטה כוללת את היתרונות הבאים:
- טקסט לא מוגבל בגודל ההודעה או במספר תווים בכל שורה.
- ניתן לשלוח הודעות בכל קידוד אפשרי, כולל עברית ו- UTF-8.
- ניתן לצרף תמונות, סרטים, ועמודי HTML.
- ניתן לצרף קבצים בינארים מכל הסוגים.
הפעלת MIME בתוך PHP
MIME לא בנוי בתוך PHP ואין פונקציות מוכנות לשימוש ב- MIME. לכן, נבנה קובץ תוספת המאפשר שליחה של הודעות MIME.[ להורדת הקובץ ] – יש לשנות את הסיומת חזרה ל- PHP.
על מנת להשתמש בפונקציות של הקובץ, יש לקרוא אליו באמצעות פונקציית הייבוא: include_once().
בשבילנו, הכי חשוב זה לשלוח הודעת HTML בקידוד שמתאים לעברית. אבל כמו שאמרתי, שימוש ב- MIME מאפשר לצרף גם קבצים אחרים, כמו תמונות וסרטים.
מערכת לדוגמא – יצירת קשר
בדוגמא הזאת נבנה מערכת פשוטה המדגימה יצירת קשר למנהל האתר.עמוד בטופס
זהו קטע מעמוד HTML רגיל המכיל מספר תאים שהגולש ימלא על מנת ליצור קשר עם מנהל האתר.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<form action="contact.php" method="post" name="form" id="form">
<table cellpadding="5" cellspacing="1">
<tr>
<th>שמך המלא:</th>
<td><input size="25" name="name" type="text" /></td>
</tr>
<tr>
<th>כתובת דוא"ל:</th>
<td><input size="25" dir="ltr" name="email" type="text" /></td>
</tr>
<tr>
<th>נושא ההודעה:</th>
<td><input size="25" dir="ltr" name="subject" type="text" /></td>
</tr>
<tr>
<th>תוכן ההודעה:</th>
<td><textarea style="width:95%; height:200px" name="text"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="submit" value="שליחה" type="submit" /></td>
</tr>
</table>
</form>
עמוד שליחת ההודעה (contact.php)
לפני שליחת ההודעה, רצוי לבדוק כי המשתמש מילא את הפרטים כראוי.קטע הקוד המופיע כאן, כולל רק את שליחת ההודעה ואינו מכיל בדיקות והודעת "תודה" לגולש.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php
// קריאה לקובץ החיצוני
include_once ('mime.inc.php');
// הגדרת מנהל האתר
$mainSettings['webmastername'] = 'הדר פורת';
$mainSettings['webmasteremail'] = '[email protected]';
// ההודעה
$html = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html dir="rtl" xml_lang="he" lang="he">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255" />
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" valign="top">
נושא: ' . $_REQUEST['subject'] . '<br />
שם: ' . $_REQUEST['name'] . '<br />
דוא"ל: ' . $_REQUEST[’email'] . '<br />
<br />
' . $_REQUEST['text'] . '<br />
</td>
</tr>
</table>
</body>
</html>';
// יצירה ושליחת ההודעה
$mime = new MIME_mail($_REQUEST[’email'] . ' (' . $_REQUEST['name'] . ')', $mainSettings['webmasteremail'] . ' (' . $mainSettings['webmastername'] . ')', $_REQUEST['subject']);
$mime -> attach($html, "", HTML, BASE64);
$mime -> send_mail();
?>
- רצוי להכניס את הגדרת מנהל האתר ($mainSettings) לקובץ הגדרות כללי.
- משתנה $html הוא בעצם ההודעה שתשלח. זהו עמוד HTML רגיל. ניתן להכניס בו צבעים, קישורים, טבלאות ומה שרוצים.
- שליחת ההודעה נעשית ע"י יצירת אובייקט מסוג MIME_mail.
- יצירת האובייקט צריכה להכיל את הפרטים הבאים (משמאל לימין).השולח, מקבל, נושא ההודעה.
- אחרי יצירת ההודעה, מצטרפים את עמוד ה- HTML שכתבנו ע"י פקודת attach().
- לאחר מכן שולחים את ההודעה ע"י פקודת send_mail().
הערה: send_mail() משתמשת בפונקציות דוא"ל של PHP. לכן, על מנת לשלוח הודעות, תוכנת שליחת דוא"ל חייבת להיות מותקנת על השרת.
המאמר נכתב ע"י הדר פורת
Keynetik – בניית אתרים
תגובות בפייסבוק