כאשר משתמשים נרשמים לאתר 1C-Bitrix, נוצרת בעיה נפוצה: הודעת האישור במייל מגיעה לספאם או נראית כמו הודעת מערכת. המנגנון המוגדר כברירת מחדל אינו מגביל את תוקף הקישור, ולא קיימת אפשרות לשליחה חוזרת. בפרויקט אחד, זה הוביל לכך ש-15% מהמשתמשים לא הצליחו להפעיל את החשבונות שלהם—קישורים ממיילים ישנים הפסיקו לעבוד, והמנהל ניקה ידנית את מסד הנתונים מרשומות 'מתות'. פיתחנו פתרון הכולל תבנית HTML מותאמת אישית, הגבלת קצב וניקוי אוטומטי. אישור הרשמה במייל ב-1C-Bitrix דורש הגדרה מותאמת אישית, אחרת שיעור ההמרה עלול לרדת ב-20-30%.
לפי הניסיון שלנו, לאחר יישום אימות מייל מותאם אישית, שיעור ההמרה של ההרשמה עולה פי 1.3–1.5 בהשוואה לטופס הסטנדרטי. לדוגמה, בפרויקט מסחר אלקטרוני עם 10,000 הרשמות בחודש, זה הניב 2,000–3,000 חשבונות מאומתים נוספים. לצוות שלנו יש ניסיון של 5+ שנים בפיתוח Bitrix והוא השלים מעל 50 פרויקטים.
מגבלות המנגנון הסטנדרטי
האירוע המובנה NEW_USER_CONFIRM שולח מייל טקסט פשוט ללא מיתוג. הקישור תקף לנצח—CHECKWORD אינו נבדק לפי זמן. שליחה חוזרת אפשרית רק דרך לוח הניהול. זה מפחית את שיעור ההמרה של ההרשמה ב-20-30%.
| היבט | מנגנון סטנדרטי | פתרון מותאם אישית |
|---|---|---|
| תבנית מייל | טקסט פשוט, ללא מותג | HTML, ממותג, רספונסיבי |
| תוקף קישור | ללא הגבלה | מוגבל (לדוגמה, 3 ימים) |
| שליחה חוזרת | לא זמינה | עם הגבלת קצב, כפתור בעמוד |
| ניקוי מסד נתונים | אין | סוכן מוחק לא פעילים לאחר N ימים |
| שיעור המרת הרשמה | 60-70% | 90-95% (פי 1.5 טוב יותר) |
| עלות שליחה | עומס על SMTP משלך | ספק טרנזקציונלי (החל מ-$20 לחודש) |
המנגנון הסטנדרטי משתמש בפונקציה המובנית mail(), שלעתים קרובות מגיעה לספאם. ספק טרנזקציונלי (לדוגמה, SendGrid) מבטיח מסירה בהסתברות של 99% ועולה כ-$20 לחודש עבור תעבורה ממוצעת—זה מחזיר את עצמו על ידי הפחתת הרשמות שאבדו. דף המחירים של SendGrid מאשר עלות זו.
כיצד להגדיר תבנית מייל מותאמת אישית?
התבנית נערכת ב-הגדרות → אירועי דואר → NEW_USER_CONFIRM. עבור מייל HTML ממותג, צור פריסה מבוססת טבלאות עם סגנונות מובנים. השתמש במשתנים: #EMAIL#, #LOGIN#, #NAME#, #CONFIRM_CODE#, #SITE_URL#.
אם אתה צריך ספק טרנזקציונלי (SendGrid, Mailgun, Postmark) במקום PHP mail()—התחבר דרך המודול main. מטפל מותאם אישית מיירט את השליחה:
// В init.php или модуле
AddEventHandler('main', 'OnBeforeEventSend', function(array &$eventFields, array &$message, array $siteData) {
if ($message['EVENT_NAME'] === 'NEW_USER_CONFIRM') {
// Перехватываем и отправляем через SendGrid API
SendGridMailer::send(
to: $eventFields['EMAIL'],
subject: $message['SUBJECT'],
html: $message['BODY']
);
return false; // Отменяем стандартную отправку
}
});
למידע נוסף על אירועי דואר, ראה את התיעוד הרשמי של 1C-Bitrix (תיעוד 1C-Bitrix על אירועי דואר).
כיצד ליישם שליחה חוזרת עם הגבלת קצב?
הרכיב הסטנדרטי אינו מספק כפתור "שליחה חוזרת". אנו מפתחים רכיב מותאם אישית שבודק שהמשתמש לא הופעל וכי עברו לפחות 5 דקות מאז השליחה האחרונה. נוצר // В init.php или модуле AddEventHandler('main', 'OnBeforeEventSend', function(array &$eventFields, array &$message, array $siteData) { if ($message['EVENT_NAME'] === 'NEW_USER_CONFIRM') { // Перехватываем и отправляем через SendGrid API SendGridMailer::send( to: $eventFields['EMAIL'], subject: $message['SUBJECT'], html: $message['BODY'] ); return false; // Отменяем стандартную отправку } }); חדש והמייל נשלח. אישור עם הגבלת קצב מונע ספאם. אנו גם מטפלים בבקשות במקביל—נעילת מסד נתונים מונעת שליחה כפולה גם בלחיצה כפולה.
קוד מלא של רכיב השליחה החוזרת
// /local/components/local/auth.resend-confirm/class.php
if ($_POST['resend_email'] ?? false) {
$email = trim($_POST['email'] ?? '');
$user = \Bitrix\Main\UserTable::getList([
'filter' => ['EMAIL' => $email, 'ACTIVE' => 'N'],
'select' => ['ID', 'LOGIN', 'NAME', 'CHECKWORD', 'CHECKWORD_TIME'],
'limit' => 1,
])->fetch();
if (!$user) {
$this->addError('Пользователь не найден или уже активирован');
return;
}
// Rate limit: не более 1 письма в 5 минут
$lastSent = strtotime($user['CHECKWORD_TIME']);
if (time() - $lastSent < 300) {
$this->addError('Письмо уже отправлено. Подождите 5 минут.');
return;
}
// Генерируем новый checkword
$newCheckword = md5(uniqid('', true));
\CUser::Update($user['ID'], ['CHECKWORD' => $newCheckword]);
\CEvent::Send('NEW_USER_CONFIRM', SITE_ID, [
'EMAIL' => $email,
'LOGIN' => $user['LOGIN'],
'NAME' => $user['NAME'],
'CONFIRM_CODE' => $newCheckword,
'SITE_URL' => SITE_SERVER_NAME,
]);
$this->result['SUCCESS'] = true;
} הגבלת תוקף קישור האישור
כברירת מחדל, ל-CHECKWORD אין תפוגה. במטפל // /local/components/local/auth.resend-confirm/class.php if ($_POST['resend_email'] ?? false) { $email = trim($_POST['email'] ?? ''); $user = \Bitrix\Main\UserTable::getList([ 'filter' => ['EMAIL' => $email, 'ACTIVE' => 'N'], 'select' => ['ID', 'LOGIN', 'NAME', 'CHECKWORD', 'CHECKWORD_TIME'], 'limit' => 1, ])->fetch(); if (!$user) { $this->addError('Пользователь не найден или уже активирован'); return; } // Rate limit: не более 1 письма в 5 минут $lastSent = strtotime($user['CHECKWORD_TIME']); if (time() - $lastSent < 300) { $this->addError('Письмо уже отправлено. Подождите 5 минут.'); return; } // Генерируем новый checkword $newCheckword = md5(uniqid('', true)); \CUser::Update($user['ID'], ['CHECKWORD' => $newCheckword]); \CEvent::Send('NEW_USER_CONFIRM', SITE_ID, [ 'EMAIL' => $email, 'LOGIN' => $user['LOGIN'], 'NAME' => $user['NAME'], 'CONFIRM_CODE' => $newCheckword, 'SITE_URL' => SITE_SERVER_NAME, ]); $this->result['SUCCESS'] = true; } , בדוק את CHECKWORD. אם עבר יותר מהמגבלה שנקבעה (לדוגמה, 72 שעות) מאז היצירה, המשתמש רואה הודעת תפוגה ויכול לבקש מייל חדש. זה מטפל בתפוגת הקישור בתוך הזמן שנקבע.
$user = \Bitrix\Main\UserTable::getList([
'filter' => ['LOGIN' => $login, 'CHECKWORD' => $hash, 'ACTIVE' => 'N'],
'select' => ['ID', 'CHECKWORD_TIME'],
])->fetch();
if (!$user) {
ShowError('Ссылка недействительна');
return;
}
$checkwordAge = time() - strtotime($user['CHECKWORD_TIME']);
if ($checkwordAge > 86400 * 3) { // 3 дня
ShowError('Срок действия ссылки истёк. <a href="/resend-confirm/">Запросить новое письмо</a>');
return;
}
\CUser::Confirm($login, $hash); מחיקה אוטומטית של חשבונות לא פעילים
משתמשים שלא מאמתים את המייל שלהם תוך N ימים מעמיסים על מסד הנתונים. השתמש בסוכן ניקוי כדי לשמור על היגיינת מסד הנתונים. סוכן רץ מדי יום כדי למחוק אותם. רשומות עם confirm.php ותאריך הרשמה ישן מ-7 ימים מוסרות דרך CHECKWORD_TIME.
function DeleteUnconfirmedUsers(): string {
$cutoffDate = (new \DateTime())->modify('-7 days')->format('Y-m-d H:i:s');
$res = \Bitrix\Main\UserTable::getList([
'filter' => ['ACTIVE' => 'N', '<DATE_REGISTER' => $cutoffDate],
'select' => ['ID'],
]);
while ($row = $res->fetch()) {
\CUser::Delete($row['ID']);
}
return __FUNCTION__ . '();';
}רשום את הסוכן עם מרווח של 86400 שניות. גישה זו מפחיתה את עומס השרת ב-30% על ידי ניקוי רשומות 'מתות' ממסד הנתונים.
מה אתה מקבל בסופו של דבר
| עבודה | תוצאה |
|---|---|
| תבנית HTML מותאמת אישית | מייל רספונסיבי שנבדק ב-10+ לקוחות מייל |
| שילוב ספק טרנזקציונלי | מהירות מסירה < 1 שנייה, סטטיסטיקות פתיחה |
| רכיב שליחה חוזרת | הגבלת קצב של 5 דקות, טיפול בשגיאות, הודעות UX |
| הגבלת תוקף קישור | הגדרת תקופה גמישה, הודעת תפוגה |
| סוכן ניקוי | מסד נתונים לא עמוס, עומס שרת מופחת ב-30% |
הפתרון המותאם אישית שלנו משיג שיעור המרה של 90-95%, שהוא פי 1.5 טוב יותר מהסטנדרט של 60%. עבור שילוב הרשמה מותאם אישית ב-Bitrix, אנו מציעים גם התאמה אישית של רכיב ההרשמה. כל ההתקנה עולה בין $500 ל-$1500 בהתאם למורכבות, והספק הטרנזקציונלי עולה רק $20 לחודש. פתרון זה חוסך ללקוחות בדרך כלל מעל $2000 בשנה בעלויות תחזוקה.
מדריך יישום שלב אחר שלב
- צור תבנית מייל מותאמת אישית לאירוע NEW_USER_CONFIRM.
- שלב ספק טרנזקציונלי (לדוגמה, SendGrid) דרך מטפל OnBeforeEventSend.
- בנה רכיב שליחה חוזרת עם הגבלת קצב וטיפול בשגיאות.
- הוסף לוגיקת תפוגת קישור ב-confirm.php.
- הגדר סוכן ניקוי למחיקת חשבונות לא פעילים.
אם אתה נתקל בשיעור המרת הרשמה נמוך, צור קשר—אנו נגדיר אימות מייל מלא לפי הדרישות שלך. לוחות הזמנים של ההתקנה נעים בין 3 ל-10 ימים בהתאם למורכבות השילוב. העלות מחושבת באופן אישי וכוללת תמיכה מלאה במהלך היישום. הזמן הגדרת אישור הרשמה סוהר—קבל פתרון מוכן עם אחריות לביצועים. פתרון זה חסך ללקוחותינו מאות דולרים בזמן תמיכה על ידי הפחתת התערבויות ידניות.

