问题描述
我正在尝试添加从我的网站后端向客户发送电子邮件的功能,并尝试使用 swiftmailer 来执行此操作.不幸的是,我不断收到错误消息
I am trying to add the functionality to send my customers emails from my website backend and am attempting to use swiftmailer to do this. I unfortunately keep getting an error message
Fatal error: Class 'Swift_smtpTransport' not found in /home/u312041955/public_html/cust/modules/customer/email.php on line 94
虽然在我看来 swiftmailer 类没有被正确包含,但它必须是这样,否则页面根本不会显示任何信息.我使用 swiftmailer 的页面代码如下.
Although it seem to me like the swiftmailer class is not being included properly it must be as otherwise the page does not display any information at all. The code from the page I am using swiftmailer from is as follows.
<?php require_once("include.php");
//Required for swift mailer
require_once (INCLUDE_URL.'/swift/lib/swift_required.php');
if(!xml2php("customer")) {
$smarty->assign('error_msg',"Error in language file");
}
// Lets grab some variables we need
$email_username = $VAR['email_username'];
$email_password = $VAR['email_password'];
$email_server = $VAR['email_server2'];
$email_server_port = $VAR['email_server_port2'];
$customer_id = $VAR['customer_id'];
$c2 = $VAR['c2'];
$download_id = $VAR['download_id'];
$submit = $VAR['submit'];
$email_to = $VAR['email_to'];
$email_from = $VAR['email_from'];
$email_subject = $VAR['email_subject'];
$message_body = $VAR['message_body'];
$attachment = $VAR['attachment'];
$rr_email = $VAR['rr'];
$cus_name = $VAR['cus_name'];
$sig = "<br>Regards,<br>".$employee_details ['EMPLOYEE_FIRST_NAME']."<br>MD-PC";
//Get All customer Emails
$q = "SELECT * FROM ".PRFX."TABLE_CUSTOMER_EMAILS WHERE CUSTOMER_ID ='".$customer_id."' ORDER BY CUSTOMER_EMAIL_ID DESC" ;
$rs = $db->Execute($q);
$customer_emails = $rs->GetArray();
$smarty->assign('customer_emails', $customer_emails);
/*Get Customer Info */
$q = "SELECT * FROM ".PRFX."TABLE_CUSTOMER WHERE CUSTOMER_ID ='".$customer_id."'" ;
$rs = $db->Execute($q);
$customer_details = $rs->GetArray();
$smarty->assign('customer_details', $customer_details);
/*Get Employee Info */
$q = "SELECT * FROM ".PRFX."TABLE_EMPLOYEE WHERE EMPLOYEE_DISPLAY_NAME ='".$login."'" ;
$rs = $db->Execute($q);
$employee_details = $rs->FetchRow();
$smarty->assign('employee_details', $employee_details);
// assign the arrays
$smarty->assign('open_work_orders', display_open_workorders($db, $customer_id));
$smarty->assign('closed_work_orders', display_closed_workorders($db, $customer_id));
//$smarty->assign('customer_details', display_customer_info($db, $customer_id));
$smarty->assign('customer_details',$customer_details);
$smarty->assign('unpaid_invoices', display_unpaid_invoices($db,$customer_id));
$smarty->assign('paid_invoices', display_paid_invoices($db,$customer_id));
$smarty->assign('memo', display_memo($db,$customer_id));
$smarty->assign('gift', display_gift($db, $customer_id));
$smarty->assign('company_details',display_company_info($db, $company_id));
//Lets Get the file downloaded to have a look at it from the database
if(isset ($download_id)){
/*Get All customer Emails */
$q = "SELECT CUSTOMER_EMAIL_ATT_NAME1, CUSTOMER_EMAIL_ATT_TYPE1, CUSTOMER_EMAIL_ATT_SIZE1, CUSTOMER_EMAIL_ATT_FILE1, FROM ".PRFX."TABLE_CUSTOMER_EMAILS WHERE CUSTOMER_EMAIL_ID ='".$download_id."'" ;
$rs = $db->Execute($q);
//header("Content-length: $rs->fields['CUSTOMER_EMAIL_ATT_SIZE1']");
//header("Content-type: $rs->fields['CUSTOMER_EMAIL_ATT_TYPE1']");
//header("Content-Disposition: attachment; filename=$rs->fields['CUSTOMER_EMAIL_ATT_NAME1']");
$file_download= $rs->fields['CUSTOMER_EMAIL_ATT_FILE1'];
$smarty->assign('file_download', $file_download);
//Print $CUSTOMER_EMAIL_ATT_NAME1;
exit;
}
// BOF Email Message details
//Mail
if(isset ($submit)){
if($_FILES['attachment1']['size'] > 0 ){
$fp = fopen($_FILES['attachment1']['tmp_name'], 'r');
$content1 = fread($fp, filesize($_FILES['attachment1']['tmp_name']));
$content1 = addslashes($content1);
fclose($fp);
}
$sql = "INSERT INTO ".PRFX."TABLE_CUSTOMER_EMAILS SET
CUSTOMER_ID = ". $db->qstr($VAR["c2"]).",
CUSTOMER_EMAIL_ADDRESS = ". $db->qstr( $VAR["email_to"]).",
CUSTOMER_FROM_EMAIL_ADDRESS = ". $db->qstr( $VAR["email_from"]).",
CUSTOMER_EMAIL_SENT_BY = ". $db->qstr( $login ).",
CUSTOMER_EMAIL_SENT_ON = ". $db->qstr( time()).",
CUSTOMER_EMAIL_SUBJECT = ". $db->qstr( $VAR["email_subject"]).",
CUSTOMER_EMAIL_BODY = ". $db->qstr( $VAR["message_body"]).",
CUSTOMER_EMAIL_ATT_NAME1 = ". $db->qstr( $_FILES['attachment1']['name']).",
CUSTOMER_EMAIL_ATT_TYPE1 = ". $db->qstr( $_FILES['attachment1']['type']).",
CUSTOMER_EMAIL_ATT_SIZE1 = ". $db->qstr( $_FILES['attachment1']['size']).",
CUSTOMER_EMAIL_ATT_FILE1 = ". $db->qstr( $content1 );
if(!$result = $db->Execute($sql)) {
force_page('core', 'error&error_msg=MySQL Error: '.$db->ErrorMsg().'&menu=1&type=database');
exit;
}
//print $sql ;
$transport = Swift_smtpTransport::newInstance( "mx1.hostinger.co.uk" , 2525 )
->setUsername('noreply@example.co.uk')
->setPassword('******');
$mailer = Swift_Mailer::newInstance($transport);
//Create a message
$message = Swift_Message::newInstance($email_subject)
->setFrom(array($email_from => $employee_details['EMPLOYEE_FIRST_NAME']))
->setTo(array($email_to => $cus_name))
->setBody($strip )
->addPart('Hello '.$cus_name , 'text/html')
->addPart($message_body, 'text/plain')
->attach(Swift_Attachment::fromPath($target_path));
//Send the message
$numSent = $mailer->send($message);
//Display how many messages were sent
echo "<script>alert('Email Information')</script>";
echo "Sent %d messages
", $numSent;
exit();
}
?>
我现在或一段时间一直在努力解决这个问题,并且可以朝正确的方向推.
I have been struggling with this now or some time and could use a shove in the right direction.
更新 1:我一直在玩这个,当我换线时
Update 1: I have been continuing to play around with this and when i change the line
$transport = Swift_smtpTransport::newInstance( "mx1.hostinger.co.uk" , 2525 )
->setUsername('noreply@example.co.uk')
->setPassword('******');
简单来说
$transport = Swift_MailTransport::newInstance()
所以它不再使用 SMTP 我收到一条消息已成功发送通知,但由于某种原因,它会将其发送到发件人电子邮件地址并被标记为垃圾邮件,因为它可能不是来自该帐户,因此我想使用 smtp.更新 2:在阅读了其他线程后,我发现
so it isn't using SMTP anymore i get a message sent successfully notification but for some reason it sends it to the from email address and also gets marked as spam because it may not have originated from the account hence why I want to use smtp. Update 2: after reading other threads I found that
$transport = Swift_smtpTransport::newInstance( "mx1.hostinger.co.uk" , 2525 );
其实应该是
$transport = Swift_SmtpTransport::newyInstance( "mx1.hostinger.co.uk" , 2525 )
;
这消除了类未找到错误,但我现在收到超时错误.我确信我使用了正确的邮件服务器详细信息,因为我从我的主机获得了它们.非常感谢任何帮助.
This gets rid of the class not found error but I now get a timeout error. I am certain I am using the correct mail server detail as I got them from my host. Any help very much appreciated.
推荐答案
最终解决了
$transport = Swift_smtpTransport::newInstance( "mx1.hostinger.co.uk" , 2525 );
实际上应该是
$transport = Swift_SmtpTransport::newyInstance( "mx1.hostinger.co.uk" , 2525 );
然后我的托管服务提供商不允许在我的计划中通过 SMTP 发送邮件.
and then afterwards that my hosting provider does not allow mail to be sent by SMTP on my plan.
这篇关于致命错误:找不到类“Swift_smtpTransport"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!