PDA

View Full Version : سوال: علت خطایoxhd Warning: mail() [function.mail]: SMTP server response: 530 Authentication required in D



hamed-php
یک شنبه 26 دی 1389, 13:52 عصر
سلام به دوستان

من یک خبرنامه نوشتم که میخواهم از روی لوکال هاست اون رو اجرا کنم

یعنی در یک صفحه اسم و ایمیل رو وارد میکنم و در صفحه خبرنامه یک متن به همان آدرس ایمل جدید ارسال میشود.

در این حین چون از لوکال هاست دارم استفاده میکنم به محض وارد کردن ایمیل یک خطا ظاهر یشو به قرار زیر:
Warning: mail() [function.mail (http://localhost/khabarnameh/function.mail)]: SMTP server response: 530 Authentication required in D:\program files\wamp\www\khabarnameh\Register.php on line 49
email error

تازه مثلاً یه میل سرور مثل Mdaemon نصب کردم وپورت SMTP رو تنظیم کردم رو 25 ولی انگار نه انگار.
حتی با پورت SMTP نرم افزار Outlook که خودش اتومات رو 587 تنظیم کرده هم چک کردم اما باز هم جواب نداد.

اصلاً از لوکال هاست میشه ایمیل واقعی فرستاد ؟

ایمل من : iran.teachers.group@gmail.com

Hell Lord
یک شنبه 26 دی 1389, 16:41 عصر
530 Authentication required
اس ام تی پی سرور شما احتیاج به نام کاربری و پاسورد دارد!
میتوانید از PEAR استفاده کنید

hamed-php
دوشنبه 27 دی 1389, 13:58 عصر
ممنون از راهنمایی شما
خوب یوزر و پسورد رو چطوری میشه از بین برد.

آیا ارسال ایمیل از لوکال هاست بدون داشتن هاست و دومین رو شما تجربه کردید؟

Hell Lord
دوشنبه 27 دی 1389, 14:43 عصر
ممنون از راهنمایی شما
خوب یوزر و پسورد رو چطوری میشه از بین برد.

آیا ارسال ایمیل از لوکال هاست بدون داشتن هاست و دومین رو شما تجربه کردید؟

یوزر و پسورد را که نمیشود از بین برد!
عملگر mail() قابلیت ارسال جزئیات یوزر و پسورد را ندارد و باید از پیر ها استفاده کنید که نمونه ی کدش به این صورت است :

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <recipient@example.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>

البته برای ارسال توسط جی میل، به دلیل اینکه از ssl استفاده میکند قضیه متفاوت است.
از phpMailer استفاده کنید بهتر است.
اینجا را ببینید :
http://deepakssn.blogspot.com (http://deepakssn.blogspot.com/2006/06/gmail-php-send-email-using-php-with.html)

hamed-php
سه شنبه 28 دی 1389, 11:37 صبح
باز هم ممنون . رفتم تو لینکی که محبت کردی گذاشتی. اما برای دانلود eror 403 رو میده و نمیشه PHP mailer رو دانلود کرد.
راستی کد هایی که نوشتم از این قراره:
برای ثبت نام:


<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Join to Us...</title>
</head>
<body>
<form method="POST" action="Register.php">
<p>Name :<input type="text" name="T1" size="20"></p>
<p>Email : <input type="text" name="T2" size="20"></p>
<p><input type="submit" value="Join" name="register"></p>
</form>
</body>
</html>


برای رجیستر کردن :


<?php
include("config.php");
//Check The Form is Submitted!?
if(!isset($_POST['Name']))
exit();
//Read Data From Form...
$Name = $_POST['Name'];
$Email = $_POST['Email'];
//Trim the Strings...
$Name = trim($Name);
$Email = trim($Email);
//Check Empty Email Addr...
if(empty($Email))
die("Please Enter your Email Address!");
//Set The special HTML Characters 2 HTML Codes
$Name = htmlspecialchars($Name);
//Remove Slashes...
$Name = str_replace("'", "", $Name);
//Convert Email Address to Lower Case
$Email = strtolower($Email);
//Check For Valid Email Address Expression
if(!preg_match("/^[.A-z0-9_-]+[@][A-z0-9_-]+([.][A-z0-9_-]+)+[A-z]{2,4}$/",
$Email))
die("Invalid Email Address!");
//Check Exist...
$Sql = "SELECT COUNT(*) FROM `users` WHERE `email` = '$Email'";
//Connect to database...
connect();
$Result = mysql_query($Sql) or die(mysql_error() . "<br>SQL: " . $Sql);
if(mysql_result($Result, 0) > 0 )
die("This Email Address already Exist!");
//Create A Random Security Code...
$RandomNum = rand(0, 9999);
$SecCode = md5($RandomNum);
//Calculate The Today Date...
$Today = date("Ymd");
//Insert New User...
$Sql = "INSERT INTO `users` (`email`, `name`, `active`, `join_date`, `sec_code`) VALUES('$Email', '$Name', '0', '$Today', '$SecCode')";
$Result = mysql_query($Sql) or die(mysql_error() . "<br>SQL: " . $Sql);
print("Registration Complete Successfully!");
//<!-- Start of Mail Body
$MailBody = 'Salam dooste aziz,
Az in ke dar khabar nameye ma ozv shodehid kheyli mamnoonim.
lotfan baraye faal shodan acount khod bar rooye link zir click nemayeed:
http://www.MySite.com/Newsletter/Active.php?Email='. $Email .'&SecCode='. $SecCode .'
Ba tashakor,
Movafagh bashid.';
// End of Mail Body-->
mail($Email,"a", $MailBody) or die("email error");
?>;
البته کد هام سالم هست اینجا بهم ریخت

Hell Lord
سه شنبه 28 دی 1389, 13:07 عصر
دوست من کدها را داخل برچسب CODE قرار میداید بهتر بود.
این هم phpMailer (http://www.phpclasses.org/package/264-PHP-Full-featured-email-transfer-class-for-PHP.html)

hamed-php
سه شنبه 28 دی 1389, 14:21 عصر
thank you friend

m_karimi
سه شنبه 28 دی 1389, 14:26 عصر
در اینجا آموزش ارسال ایمیل از لوکال هاست با phpmailer با یک مثال که از سایت gigfa.com گرفته شده توضیح داده شده.

http://barnamenevis.org/showthread.php?268796-ارسال-ايميل-از-طريق-localhost-با-استفاده-از-كلاس-phpmailer&highlight=

http://gigfa.com/free-hosting-services/tutorials/vista-panel/smtp-config

hamed-php
سه شنبه 28 دی 1389, 16:02 عصر
این پیغام ظاهر شد. ایمیل و پسورد جیمیل و ایمیل دریافت کننده رو وارد کردم اما..
Warning: fsockopen() [function.fsockopen (http://localhost/mail/function.fsockopen)]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in D:\program files\wamp\www\mail\lib\class.smtp.php on line 122


$errno, # error number if any
Fatal error: Call to undefined method SMTP::getError() in D:\program
files\wamp\www\mail\lib\class.phpmailer.php on line 1910
$lasterror = $this->smtp->getError();

Hell Lord
سه شنبه 28 دی 1389, 18:22 عصر
در مورد خطای اول :

. ابتدا به php.ini مراجعه نموده و extension=php_openssl.dll را از حالت كامنت خارج نمائيد.
در مورد خطای دوم ، لطفا" کد را قرار دهید.

m_karimi
سه شنبه 28 دی 1389, 20:16 عصر
این پیغام ظاهر شد. ایمیل و پسورد جیمیل و ایمیل دریافت کننده رو وارد کردم اما..
Warning: fsockopen() [function.fsockopen (http://localhost/mail/function.fsockopen)]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in D:\program files\wamp\www\mail\lib\class.smtp.php on line 122


$errno, # error number if any
Fatal error: Call to undefined method SMTP::getError() in D:\program
files\wamp\www\mail\lib\class.phpmailer.php on line 1910
$lasterror = $this->smtp->getError();

سلام
من هم قبل از تغییر php.ini دقیقا همین اررور شما را داشتم. وقتی php.ini را تغییر دادم اررور رفع شد.
اگر هم تغییر دادید و باز این اررور را می دهد، wamp را دوباره نصب کنید تا تغییراتی که قبلا در php.ini اعمال کردید از بین برود.

http://barnamenevis.org/showthread.php?268529-ارسال-ایمیل-از-طریق-localhost&highlight=

hamed-php
چهارشنبه 29 دی 1389, 10:23 صبح
باز هم ممنون - خطای اول از بین رفت!

این خط مشکل داره $lasterror = $this->smtp->getError();

این کد بسیار طولانی بود اینجا جا نشد.
لینک کد اینجاست.
http://www.phpclasses.org/package/264-PHP-Full-featured-email-transfer-class-for-PHP.html

خط مربوطه اینجاش نوشته شده بود:


protected function SetError($msg) {
$this->error_count++;
if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
$lasterror = $this->smtp->getError();
if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) {
$msg .= '<p>' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "</p>\n";
}
}
$this->ErrorInfo = $msg;
}

hamed-php
چهارشنبه 29 دی 1389, 11:27 صبح
خیلی ممنون از راهنمایی شما دوستان خوبم!