PDA

View Full Version : سوال: ارسال ایمیل



soroush.r70
دوشنبه 28 اسفند 1391, 12:44 عصر
اسکریپت ایمیلی دارم که تمام ایمیل ها در داخل فایل متنی قرار می گیرد و ایمیل ارسال می کند حالا می خوام در هنگام ارسال ایمیل هر دقیقه 5 دقیقه 10 ایمیل ارسال کند در اسکریپت زیر باید چه چیزهایی اضافه کنم تا این عملیات انجام شود.


if(isset($_POST['subject'])){
$email = $_POST['email'];
chmod("inc/list.txt",0777);
$listmail = file_get_contents("inc/list.txt");
$allmail = explode("\n", $listmail);
$subject=$_POST['subject'];
$massage=$_POST['message'];
$from_add = "info@site.ir";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers = "From: $from_add \r\n";
foreach ($allmail as $value)
{
mail($value,$subject,$massage,$email,$headers);
}
echo'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script >alert("خبرنامه به کاربران ارسال شد");</script>
<meta http-equiv="refresh" content="1;url=';echo root; echo'rss.php" />';
die();
}

قرم :


<form action="" method="post" name="form1" target="_self" id="form1" enctype="multipart/form-data">
<table width="100%" class="tblform">
<tr>
<td><b>عنوان خبر</b></td>
<td><input type="text" class="panjang" name="subject" required autocomplete="off"></td>
</tr>
<tr>
<td><b>ایمیل فرستنده</b></td>
<td><input type="email" class="panjang" name="email" required autocomplete="off" dir="ltr" value="info@site.ir"></td>
</tr>
<tr>
<td><b>متن خبر</b></td>
<td align="center">
<textarea name="message" id="TextArea1"></textarea>
</td>
</tr>
<tr>
<td></td><td>
<input type="submit" class="button" name="send" value="ارسال خبرنامه">
<input type="reset" class="button" value="مجدد">
</td>
</tr>
</table>
</form>

iner30
دوشنبه 28 اسفند 1391, 13:17 عصر
فکر میکنم با php حداکثر فاصله ای که میشه انداخت 30 ثانبه باشه
و شما باید از cronjob استفاده کنی

MostafaEs3
دوشنبه 28 اسفند 1391, 15:56 عصر
اسکریپت ایمیلی دارم که تمام ایمیل ها در داخل فایل متنی قرار می گیرد و ایمیل ارسال می کند حالا می خوام در هنگام ارسال ایمیل هر دقیقه 5 دقیقه 10 ایمیل ارسال کند در اسکریپت زیر باید چه چیزهایی اضافه کنم تا این عملیات انجام شود.


if(isset($_POST['subject'])){
$email = $_POST['email'];
chmod("inc/list.txt",0777);
$listmail = file_get_contents("inc/list.txt");
$allmail = explode("\n", $listmail);
$subject=$_POST['subject'];
$massage=$_POST['message'];
$from_add = "info@site.ir";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers = "From: $from_add \r\n";
foreach ($allmail as $value)
{
mail($value,$subject,$massage,$email,$headers);
}
echo'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script >alert("خبرنامه به کاربران ارسال شد");</script>
<meta http-equiv="refresh" content="1;url=';echo root; echo'rss.php" />';
die();
}

قرم :


<form action="" method="post" name="form1" target="_self" id="form1" enctype="multipart/form-data">
<table width="100%" class="tblform">
<tr>
<td><b>عنوان خبر</b></td>
<td><input type="text" class="panjang" name="subject" required autocomplete="off"></td>
</tr>
<tr>
<td><b>ایمیل فرستنده</b></td>
<td><input type="email" class="panjang" name="email" required autocomplete="off" dir="ltr" value="info@site.ir"></td>
</tr>
<tr>
<td><b>متن خبر</b></td>
<td align="center">
<textarea name="message" id="TextArea1"></textarea>
</td>
</tr>
<tr>
<td></td><td>
<input type="submit" class="button" name="send" value="ارسال خبرنامه">
<input type="reset" class="button" value="مجدد">
</td>
</tr>
</table>
</form>


از این کلاس به همراه phpMailer (یا کلاسهای phpMailer - swiftMailer بصورت تکی) استفاده کن :: http://barnamenevis.org/showthread.php?384854 :چشمک: زمانی که شما بطور معمولی با تابع mail ایمیل رو ارسال میکنی احتمالا اسپم شدن آی پی هاست بالا میره و این خیلی خوب نیست
----------------------------------
برای اینکه مثلا هر 5 دقیقه 10 ایمیل از لیست رو ارسال کنه کافیه کلید قبلی آرایه رو توی یک فایل یا دیتابیس ذخیره کنی بعد دوباره از همونجا بخونی ردیف ها رو ... یک پردازش جدید کرون جابز توی سرور ایجاد کن و این دستور رو بزن ::

php -f /home/admin/xxxxx/public_html/file.php
دقت کن تمامی مراحل خوندن فایلها ، اینکلود و کارهایی مثل این باید حتما با آدرس کامل سرور همراه باشه چون زمانی که پردازش از طریق سرور انجام میشه آدرس روت ، همون روت سرور هست

مثال برای اینکلود ::

include('/home/admin/xxxxx/public_html/class.php');
البته یک روش دیگه هم برای فراخوانی وجود داره و اونم استفاده از wget هست که آدرس وب سایت رو لود میکنه ... دراین حالت نیازی به اینکار نیست ولی خب دسترسی پایینتر میاد

soroush.r70
سه شنبه 29 اسفند 1391, 13:07 عصر
دلیل این خطا چیه در هنگام ارسال ایمیل هر چی بررسی می کنم می بینم هیچ مشکلی نداره اسکریپت هم همون پست 1 هست


A message that you sent contained a recipient address that was incorrectly
constructed:

From: missing or malformed local part (expected word or "<")

The message has not been delivered to any recipients.

------ This is a copy of your message, including all the headers. ------

soroush.r70
چهارشنبه 30 اسفند 1391, 08:45 صبح
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!؟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!

Unique
چهارشنبه 30 اسفند 1391, 12:10 عصر
دوست عزیز شما تابع mail را اشتباه دارین صدا میزنین :


mail($value,$subject,$massage,$email,$headers);

شما دارین بجای header ها متغیر email$ میدین که قطعا توش header نیست و کاراکتر های مشکل ساز داره. فرمت ایمیل اینطوریه ؛


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

این خط را درست کنید مشکل حل میشه ، حتما هم معتبر بودن syntax خود email ها را چک کنید. با reg exp میشه خیلی راحت این کار را انجام داد. با تابع خود php هم میشه :


filter_var('unique@example.com', FILTER_VALIDATE_EMAIL)