אתה נמצא כאן מדריכים  >>  שליחת אי-מייל  >>  עיבוד הטופס ושליחת האי-מייל

עיבוד הטופס ושליחת האי-מייל

הקובץ הזה של הסקריפט, תפקידו הוא לבדוק את שדות החובה של הטופס, ובמקרה של שדה ריק (או שדה שמכיל רק רווחים, ללא טקסט) ידפיס הודעת שגיאה. במקרה של שגיאה, הסקריפט לא ינסה לשלוח את הטופס. כאשר הטופס מולא בהתאם, הסקריפט יכין את האי-מייל וינסה לשלוח אותו, כשלבסוף יציג הודעה בדבר הצלחת השליחה.

בדיקת שדות הטופס

שדות הטופס שהוגדרו כשדות חובה הן: כתובת הנמען, כתובת המוען, נושא ההודעה וגוף ההודעה. הסקריפט מקזז את הרווחים מהקצוות של השדות: כתובת הנמען, כתובת המוען, שם המוען ונושא ההודעה. הפונקציה trim() מקזזת גם כניסות של שורות חדשות (\n), ולכן אנו לא משתמשים בפונקציה זו כדי לא לשנות את התוכן של ההודעה. אנו מניחים כי הטופס מולא בהתאם, ובודקים את קיומם של שדות החובה. במקרה של שדה חובה ריק, מדפיסים הודעת שגיאה ומשנים את המשתנה הגלובלי $mail_ok לשקר, כדי לא לשלוח את האי-מייל.

ניתן להוסיף פונקציה לבדיקת התחביר של כתובת האי-מייל, ולהשתמש בפונקציה זו כדי לבדוק אם שדות האי-מייל של הנמען והמוען מייצגים כתובת אי-מייל חוקית. ובמקרה של כתובת אי-מייל לא חוקית, אפשר להציג הודעת שגיאה, ולמנוע את שליחת האי-מייל.

file name: mail_send.inc
<?
  /* removing space characters from the edges of the data infos */
/*מורידים את כל הרווחים
מההתחלה ומהסוף של השדות.
*/

  $_POST["mail_to"]=trim($_POST["mail_to"]);
  $_POST["mail_from"]=trim($_POST["mail_from"]);
  $_POST["mail_name"]=trim($_POST["mail_name"]);
  $_POST["mail_subject"]=trim($_POST["mail_subject"]);
  
  $mail_ok=true;
/*בתחילה אנו מניחים כי הטופס תקין.
נשנה את ערכו במקרה של שגיאה.
*/

  
  /* checking that the fields are filled ok */
/*בודקים אם כל שדות החובה מלאים.
במקרה של שדה ריק, מדפיסים הודעה
ומשנים את המשתנה הגלובלי $mail_ok.
*/

  if ($_POST["mail_to"]=="")
  {
     echo "<FONT color=\"#FF0000\">נא למלא את השדה &#039;שלח אל&#039;.</FONT><BR>\n";
     $mail_ok=false;
  }
  if ($_POST["mail_from"]=="")
  {
     echo "<FONT color=\"#FF0000\">נא למלא את השדה &#039;אי-מייל של השולח&#039;.</FONT><BR>\n";
     $mail_ok=false;
  }
  if ($_POST["mail_subject"]=="")
  {
     echo "<FONT color=\"#FF0000\">נא למלא את השדה &#039;נושא&#039;.</FONT><BR>\n";
     $mail_ok=false;
  }
  if ($_POST["mail_body"]=="")
  {
     echo "<FONT color=\"#FF0000\">נא למלא את השדה &#039;הודעה&#039;.</FONT><BR>\n";
     $mail_ok=false;
  }
?>

הכנת האי-מייל ושליחתו

אם בדיקת שדות הטופס עבר בהצלחה, אנו ננסה לשלוח את האי-מייל. כדי לשלוח אי-מייל צריך להכין את הא-מייל, צריך לדעת את כתובת הנמען, את נושא ההודעה ואת גוף ההודעה (פרמטרים שהם חובה בפונקציה mail()). פרמטר אפשרי בשליחת אי-מייל עם הפונקציה mail(), הוא ה-headers, שמספקים מידע נוסף על האי-מייל. במקרה שלנו אנו משתמשים ב-header של From, שמספק מידע על כתובת המוען (ואפשר גם על שם המוען).

לאחר-מכן אנו שולחים את האי-מייל באמצעות הפרמטרים שהכנו. ושמים את הערך המוחזר ממנו ב-$mail_ok. הפונקציה mail() מחזירה אמת במקרה שהאי-מייל נשלח בהצלחה, ושקר במקרה של כישלון. אם האי-מייל נשלח בהצלחה, אנו נדפיס הודעת הצלחה (מבלי להציג את טופס האי-מייל, ראה מדוע בקובץ mail.php). אם שליחת האי-מייל נכשלה, אנו נדפיס הודעת שגיאה, ונציג את טופס האי-מייל לתיקון.

file name: mail_send.inc (continue)
<?
  if ($mail_ok)
/*אם הטופס מולא בהתאם, אנו
מנסים לשלוח את האי-מייל.
*/

  {
     $to=$_POST["mail_to"];
/*כתובת הנמען.*/

     $subject=$_POST["mail_subject"];
/*נושא ההודעה.*/

     $body=$_POST["mail_body"]."\n\n\n\n\n-----------------------------------------------------------\n נשלח באמצעות סקריפט של אלי חן\n Powered By a PHP script by Eli Hen";
/*גוף ההודעה.
הוספנו טקסט לסוף ההודעה.
ניתן להוסיף כל טקסט שתרצו.
*/

     $headers="From: ".$_POST["mail_from"]."\r\n";
/*ה-headers של אי-מייל.
אנו מוסיפים את ה-header
של From, כתובת המוען.
*/

  
     if ($_POST["mail_name"]!="")
/*אם גם השדה של
שם המוען הוכנס.
*/

        $headers="From: ".$_POST["mail_name"]." <".$_POST["mail_from"].">\r\n";
/*הצורה של ה-header של From
משתנה קצת כאשר מוסיפים שם.
*/

  
     $mail_ok=@mail($to,$subject,$body,$headers);
/*מנסה לשלוח את האי-מייל.
מחזיר אמת כאשר האי-מייל
נשלח בהצלחה.
*/

  
     if ($mail_ok)
/*אם שליחת האי-מייל הצליחה,
מדפיסים הודעת הצלחה.
*/

     {
        echo "<P><B>האי-מייל נשלח בהצלחה!</B></P>";
        echo "<A href=\"mail.php\">שלח אי-מייל חדש</A>";
     }
     else
/*אם שליחת האי-מייל נכשלה,
מדפיסים הודעת כשלון.
*/

     {
        echo "<P><FONT color=\"#FF0000\"><B>שליחת האי-מייל נכשלה!!!</B> (בדוק את כתובת האי-מייל שאליו אתה שולח)</FONT></P>";
     }
  }
?>


תגובות בנושא

פועל מצויין !! 09-12-02 07:00
 דינו
#416

קשה להאמין אבל פשוט העתקתי את שלושלת הקבצים לשרת שלי והם פעלו מצויין, בלי שום בעיות ובלי שום שינויים !

תודה.

אבל לא כתבתם 31-10-02 13:01
 איתי
#483

איך עושים בדיקה לאימייל... ואם אתה יכול גם להגיד איך עושים בדיקה/אינפוט כדי ששדה מסויים יקבל רק מספרים

בעיה ואני לא יודע מה .... 02-12-03 15:01
 אמיר
#732

שלום , ניסיתי חלק מהתכניקות האלה והכל בסדר עד שהיתה לי בעיה , הבעיה של הבעיה היא שאני לא יודע מה היא כי השרת שלי לא אומר איפה יש לי בעיות ובאיזה שורות, מה יכול לעזור לי להגיד לשרת לתת לי אינפורמציה לגבי בעיה בסקריפט כי ,כרגע כשיש בעיה המסך פשוט נהיה לבן ולא אומר כלום , אני צריך כיוון .... תודה

הסתרת שגיאות 02-12-03 16:01
 אלי חן (מנהל)
#734

בהרבה שרתים מעדיפים לקבוע ש PHP לא תדפיס שגיאות לפלט משיקולי אבטחה.. אבל השגיאות בדר"כ נשמרות בלוג השגיאות (error_log) של האתר שלך..
אם אתה מריץ על יוניקס/לינוקס אז תוכל להשתמש בפקודה tail כדי להדפיס את השגיאות האחרונות.

שליחת דואר מתוך PHP המותקן על Win2k 03-12-03 01:00
 ארז ניניו
#739

האם ניתן לשלוח דואר גם ע"י PHP המותקן על IIS?
ואם כן אז איך מגדירים את שרת הדואר היוצא.

הגדרת שרת דואר על ווינדוס 03-12-03 02:02
 אלי חן (מנהל)
#742

שנה בקובץ ה-ini של PHP את הכניסה SMTP להיות שם השרת באמצעותו PHP שולחת את האי-מייל.

אם שרת ה-SMTP (שרת אי-מייל בווינדוס) נמצא על השרת המקומי, אז כתוב:
SMTP = localhost

כדי ש-PHP תצליח לשלוח את האי-מייל, חייב כי על השרת ירוץ שרת SMTP.

אימייל בפורמט HTML 10-12-03 01:00
 אוריין
#1157

שלום אלי!
תודה על כל המידע המצויין שאתה מספק פה!
אני קצת חדש בשטח ועוד לא ממש יודע איך לחפש את הדברים שאני צריך.
אני משתמש בטופס שונה מהטופס שבמדריך. כשהוא נשלח, הוא מגיע כטקסט בלבד.
איך אפשר לגרום למייל להשלח כ-HTML?
הרבה תודה!
אוריין.

שליחת אי-מייל כ-HTML 31-10-03 17:01
 אלי חן (מנהל)
#1201

הוסף ל-headers של האי-מייל Content-Type של תוכן HTML. כך לדוגמא:
$headers.="Content-Type: text/html; charset=windows-1255";

אני לא מקבל את שדה headers 02-11-03 10:01
 דור
#1313

תודה רבה, זה עובד נהדר.

בעייה אחת: אני מקבל את גוף ההודעה בלבד, ללא שדות שם השולח ואימייל השולח. אשמח אם תוכל לומר לי מה לא בסדר.
תודה.

נמען אוטומטי? 02-11-03 11:01
 רז אוזן
#1316

היי, רציתי לדעת אם אני יכול לעשות שנמען יהיה כתובת אימייל שאני מגדיר מראש?
אין לי ידע ממש נרחב ב- PHP אז בבקשה לא לסבך.
תודה, רז.

בעיה עם עברית 01-11-05 07:01
 רונן גוטנמכר
#2634

למדתי מהדוגמא כאן והיא מאד הישכילה אותי
למרות זאת נתקלתי בבעיה עם עברית הטופס שלי באמת נשלח אבל שם השולח והנושא עברו למאיל משובשים
למרות שהגדרתי בheaders
charset utf-8

לא מצליח לי 04-12-06 06:00
 הילה אי
#2670

היי
אני מנסה להפעיל את הסקריפט הזה ללא הצלחה
אין לי שום ידע ב-PHP ואני חייבת את הסקריפט בשפה זו כי השרת תומך בה.
מישהוא יכול לעזור לי בבקשה?

איך שולחים ל2 מכותבים 06-12-07 22:01
 מאיר גברי
#2773

שלום אני מעוניין לשלוח את המאייל ל2 מכותבים

איך עושים?
תודה

העלאה לשרת 09-12-07 18:00
 אייל ברודובסקי
#2786

שלום מישהו יכול להסביר לי בדיוק איך אני מעלה את הקבצים לשרת , בכל צורה שהיא הם לא עובדים אצלי.

זה מייל אני אשמח לקבל עזרה eyalbr101@yahoo.com
תודה

איך שולחים לשני מכותבים 01-12-11 01:01
 מירב שטאובר
#2891

בכדי לשלוח לשני מכותבים או יותר:
כותבים כתובת אימייל אחת
כותבים פסיק ,
ואז עוד אחת וכך הלאה...

בעיות עם עברית 01-12-11 01:01
 מירב שטאובר
#2892

יש הרבה בעיות עם עברית. בכדי שהסקריפט ישלח הודעות בעברית צריך לדאוג לשני דברים עיקריים:
1. שהקובץ PHP המכיל את הסקריפט ישמר בפורמט UTF8 . ניתן להבטיח זאת ע"י שימוש למשל בתוכנת Notepad++ ולבחור להמיר את הקובץ לפורמט המבוקש (ראה תפריט encoding). ורק אז להכניס את הטקסטים בעברית ולשמור אותם בתוכנה הנ"ל. כעת אכן הקובץ ישמר עם תוכנו בעברית ולא בגיברייש.
2. בכדי שההודעה שנשלחת בסקריפט אכן תגיעה בעברית למען הרצוי, הוסף ל-headers של האי-מייל Content-Type מתאים:
$headers.="Content-Type: text/plain; charset=utf-8";
גם text/html יהיה רלוונטי , מן הסתם, תלוי בתוכן ההודעה : אם היא מכילה רק טקסט אז הדוגמה הראשונה תתאים. ואם ההודעה מכילה תגיות HTML אז הסוג יהיה
text/html

איך ששולחים ליותר ממכותב אחד 01-12-11 02:01
 מירב שטאובר
#2893

בכדי לשלוח לשני מכותבים או יותר:
כותבים כתובת אימייל אחת
כותבים נקודה פסיק ;
ואז עוד כתובת מייל וכך הלאה...


לדף הקודםטופס האי-מייל -הקודם
לתחילת הדףלתחילת הדף
הבא- הגנת מידעלדף הבא