簡體   English   中英

如何在沒有PHP郵件的情況下發送表單數據?

[英]How to send form data without PHP mail?

我試圖找出我的問題,我有一個共享的托管服務,出於安全原因,該服務已禁用了PHP郵件功能。

我需要使用PHP發送一些表單數據,我只知道如何使用PHP郵件功能發送表單數據。

我嘗試使用phpmailer,它是從GitHub獲得的,但沒有用。

我的問題很簡單,是否有一種變通方法來發送沒有PHP郵件功能的表單數據來繞過禁用的phpmail,並且在我的共享Web托管上沒有人進行調整?

<?php

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");
    require("phpmailer/class.smtp.php");

    $mail = new PHPMailer();

    $mail->CharSet="utf-8";
    $mail->IsSMTP();                               
    $mail->Host = 'localhost';
    $mail->Port = 465;
    $mail->SMTPAuth = true;    
    $mail->Username = "user@mysite.com";
    $mail->Password = "password"; 

    $mail->setFrom($email, $recipient_name);
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                          
    $mail->IsHTML(false);                          

    $mail->Subject = "Contact form";
    $mail->Body    = $message;

   if(!$mail->Send())
   {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
   }

   echo "Message has been sent";
}

//vars
$subject = "Contac form";

$from = $_POST['email'];

//data
$msg = "NAME: "  .$_POST['name']    ."<br><br>\n";
$msg .= "EMAIL: "  .$_POST['email']    ."<br><br>\n";
$msg .= "WEBSITE: "  .$_POST['website']    ."<br><br>\n";
$msg .= "MESSAGE: "  .$_POST['message']    ."<br>\n";

//Headers
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";


$mail="support@mysite.com";

//send mail
//mail($mail, $subject, $msg, $headers, "-f $from");
send_mail($from, $_POST['name'], $msg);

?>

從本質上講,這全都歸結為您知道共享主機提供商為您提供的環境。

由於他們禁用了php的mail()函數,因此我想他們正在嘗試不必使用其服務來處理垃圾郵件發送者。

因此,他們可能也不會在本地主機上運行SMTP服務,並且很可能會過濾出到端口25的傳出流量,以防止您也將其發送到其他郵件服務器上。 但是再說一遍:他們可能還沒有。

但是值得檢查一下可用的內容:

  • 在本地主機上運行SMTP服務嗎?
  • 他們為合法客戶提供任何傳出中繼SMTP服務嗎?
  • 他們是否將端口25上的傳出SMTP過濾到世界其他地方?
  • 它們是否允許您連接到經過身份驗證的SMTP服務進行傳送?

這是一項艱巨的工作,如何獲得答案很大程度上取決於您所獲得的服務的最低程度以及互聯網上有哪些其他資源。 無論如何,最簡單的方法就是簡單地詢問您的供應商:他們知道他們允許什么,他們阻止了什么以及下一步要做什么,這取決於他們試圖擺脫垃圾郵件發送者的位置。

無論如何,最好的選擇是對目標地址為gmail的google服務器使用經過身份驗證的傳遞。 知道自己在做什么的Google或共享托管服務提供商最有可能濾掉它。 請注意:經過身份驗證的交付方式意味着網絡服務器可以通過一種方式向Google進行身份驗證,因此,如果不同客戶之間的隔離不是最理想的(到目前為止,並非始終做到萬無一失),則共享主機中的“鄰居”可以相對輕松地獲得這些憑據。 ,因此請確保它不是您非常在意的帳戶-因此:創建一個用於該用途的gmail地址...

如果他們不允許任何事情。 您仍然可以將電子郵件保存在服務器上,從台式機或其他服務器上檢索電子郵件,並通過一些編程從那里發送。

首先,您必須包括所有要求以PHP郵件發送器發送郵件

require 'assets/PHPMailer/PHPMailer/src/Exception.php';
require 'assets/PHPMailer/PHPMailer/src/OAuth.php';
require 'assets/PHPMailer/PHPMailer/src/PHPMailer.php';
require 'assets/PHPMailer/PHPMailer/src/POP3.php';
require 'assets/PHPMailer/PHPMailer/src/SMTP.php';
require('assets/PHPMailer/simple_html_dom.php');

在您定義設置之后,這里是我使用的配置:(我使用gmail發送郵件,要使用gmail,您必須在gmail中啟用config才能使用不太安全的應用)

$mailSub = filter_input('insert mail subject here');
$mailMsg = $html_new;
$mailto = 'inset mail you wish to send here';
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->IsSmtp();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';

// LOGIN INFO TO YOUR GMAIL
$mail->Username = 'gmail';
$mail->Password = 'password for gmail';
$mail->SetFrom('name you wish to show as sender');
//-------------------------------------------

$mail->Subject = 'subject';
$mail->Body = 'body of a mail, you can use html here';
$mail->AddAddress('reciever mail');
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
         )
    );
$mail->Send()

這是使用php mailer的完整應用程序與我的github存儲庫的鏈接 ,也許會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM