我面临imap问题。事实上,我正在尝试获取一些主题词与数据库中关键字匹配的邮件。我使用的是一个可以正常工作的电子邮件id,但当使用不同的电子邮件id和相同的邮件时,它显示的最长执行时间超过了30秒。我还检查了gmail中的imap设置,它们都很好。。
同时也得到了这个错误。。"未定义的属性:stdClass::$subject"
<?php
// Create connection
$con=mysqli_connect("localhost",'root',"","project 6 sem");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
//else
//echo "Database connected..</br>";
?>
<?php
function Reply($prikey,$seckey,$submit3)
{
$con=mysqli_connect("localhost",'root',"","project 6 sem");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo $prikey;
echo $seckey;
$result = mysqli_query($con,"SELECT * FROM data1 where pkey='$prikey' and skey='$seckey'");
while($row = mysqli_fetch_array($result))
{
if($submit3 == "Positive")
{
$ans1 = $row['reply_yes'];
//echo $ans1;
}
else if($submit3 == "Negative")
{
$ans1 = $row['reply_no'];
//echo $ans1;
}
echo "<br>";
break;
//header('location:'.$_SERVER['HTTP_REFERER']);
}
mysqli_close($con);
return $ans1;
}
?>
<?php
$submit1 = NULL;
$submit2 = NULL;
if(isset($_POST['submit1']))
{
$submit1 = ($_POST['submit1']);
}
//echo $submit1;
if(isset($_POST['submit2']))
{
$submit2 = ($_POST['submit2']);
}
if(isset($_POST['select']))
{
$select = ($_POST['select']);
}
$cbody=0;
$subject=0;
$hostname= '{imap.gmail.com:993/ssl}INBOX';
$username = 'xxxxx';
$password = 'XXXXX';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox,'ALL');
$count = imap_num_msg($inbox);
$temp=array();
$m=0;
$a=0;
$sk=array();
$pk=array();
$subcount=0 ;
$subarray=array() ;
$msgcount=0;
$msgarray=array() ;
$ans1 = "";
$b=0;
if($inbox)
{
$num = imap_num_msg($inbox);
rsort($emails);
$pk = array();
foreach ($emails as $email_number)
{
$b++;
echo "$b</br>";
// ini_set('max_execution_time',50);
$headers = imap_headerinfo($inbox, $email_number);
$sub_arr=explode(" ",$headers->subject);
$count_sub=count($sub_arr);
$pkey=array("Permission","permission",
"Application","application",
"Complaint","complaint",
"Enquiry","enquiry",
);
$skey=array("lab","Lab","auditorium","Auditorium","IT Parking","leave");
for($j=0;$j<$count_sub;$j++)
{
if($a==4)
break;
for($r=0;$r<count($pkey);$r++)
{
if($a==4)
break;
if($sub_arr[$j]==$pkey[$r])// Find the Primary key i.e from Subject
{
$a++;
$sub=$headers->subject;
$subarray[$subcount]=$headers->subject;
$subcount+=1;
//echo "<b>$headers->subject</b></br>";
$message=imap_fetchbody($inbox,$email_number,1);
$msgarray[$msgcount]=imap_fetchbody($inbox,$email_number,1);
$body=explode(" ",$msgarray[$msgcount]);
$msgcount+=1;
$count=count($body);
如果不能更改INI,可以在脚本中设置。这可能对单个脚本更安全,而不是对服务器上的所有脚本进行更改(就像INI更改一样)。
<?php
set_time_limit ( 0 ); //0 = unlimited
有关详细信息:http://www.php.net/manual/en/function.set-time-limit.php
ANSWER您可以更改php.ini
文件中的max_execution_time
参数。斯坦达特今年30岁。如果您有访问权限,您可以将其更改为所需的值。
源
但是我认为这不是一个好主意(如果您不能更改php.ini
文件)。
另一种方法是制作php文件,在其中您将获得用户电子邮件的数组。之后,您将创建ajax
请求,该请求将发送每封电子邮件。因此,您的脚本只会工作几秒钟(或者,可能是几毫秒),但会工作很多次。我认为它更好(确切地说,如果你不能编辑php.ini
,就像在我的情况下一样)。
如果您使用这种方法,这将允许您获得错误计数,例如,并使ui更加用户友好。例如,您可以跟踪已经发送的邮件数量。
我将添加一个简单的例子:
脚本,它将获取所有电子邮件并发送ajax请求:
foreach(email in emails) {
?>
<script type="text/javascript">
$.ajax({
url: "send_rent_receipts.php",
type: 'POST',
data: 'mail='+email, // and other data
success: function(data){
count = count + 1;
if(data == 'true')
{ // add successfull sent
countSuccess = countSuccess + 1;
}
else
{ // add error
arr.push(data);
countErrors = countErrors + 1;
}
if(count == <?=$totalEntries;?>)
{
$('#status').html('All mails had been sent!<br>Sent successfully: '+countSuccess+', Errors: '+countErrors);
$("#status-image").attr( "src", "/images/thumb_up.png" );
for (key in arr)
{
$('results').append(arr[key]+"<br>"); // handling errors
}
}
else
{
$('#status').html('Process...<br><b>Total e-mail's: '+totalEntries+'</b><br>Sent successfully: '+countSuccess+', Errors: '+countErrors);
}
}
});
</script>
<?
}
将发送1封电子邮件的脚本:
// send 1 e-mail
简单:)
但是,您可以更改max_execution_time
:)