2017-04-20 75 views
0

我在PHP这个代码,它的工作原理:的ActionMailer无法识别身份验证类型

$host = "smtp.office365.com"; 
$username = "[email protected]"; 
$password = "a"; 
$port = 587; 
$smtpSecure = 'tls'; 
$mail = new PHPMailer(true); 
$mail->IsSMTP(); 
$mail->Host = $host; 
$mail->Port  = $port; 
$mail->SMTPSecure = $smtpSecure; 
$mail->SMTPAuth = true; 
$mail->Username = $username; 
$mail->Password = $password; 
$mail->SetFrom('[email protected]', 'B2b'); 
$mail->SMTPDebug = 4; 
$mail->Debugoutput = 'html'; 
$mail->IsHTML(true); 
$mail->MsgHTML("test"); 
$mail->addAddress('[email protected]', 'Vaktor'); 
$mail->Send(); 

它返回:

Connection: opening to smtp.office365.com:587, timeout=300, options=array() 
Connection: opened 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "220 VI1PR07CA0176.outlook.office365.com Microsoft ESMTP MAIL Service ready at Thu, 20 Apr 2017 08:14:05 +0000" 
SERVER -> CLIENT: 220 VI1PR07CA0176.outlook.office365.com Microsoft ESMTP MAIL Service ready at Thu, 20 Apr 2017 08:14:05 +0000 
CLIENT -> SERVER: EHLO localhost 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]" 
SMTP -> get_lines(): $str is "250-SIZE 157286400" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400" 
SMTP -> get_lines(): $str is "250-PIPELINING" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING" 
SMTP -> get_lines(): $str is "250-DSN" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN" 
SMTP -> get_lines(): $str is "250-ENHANCEDSTATUSCODES" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES" 
SMTP -> get_lines(): $str is "250-STARTTLS" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS" 
SMTP -> get_lines(): $str is "250-8BITMIME" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-8BITMIME" 
SMTP -> get_lines(): $str is "250-BINARYMIME" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-8BITMIME250-BINARYMIME" 
SMTP -> get_lines(): $str is "250 CHUNKING" 
SERVER -> CLIENT: 250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-8BITMIME250-BINARYMIME250 CHUNKING 
CLIENT -> SERVER: STARTTLS 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "220 2.0.0 SMTP server ready" 
SERVER -> CLIENT: 220 2.0.0 SMTP server ready 
CLIENT -> SERVER: EHLO localhost 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]" 
SMTP -> get_lines(): $str is "250-SIZE 157286400" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400" 
SMTP -> get_lines(): $str is "250-PIPELINING" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING" 
SMTP -> get_lines(): $str is "250-DSN" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN" 
SMTP -> get_lines(): $str is "250-ENHANCEDSTATUSCODES" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES" 
SMTP -> get_lines(): $str is "250-AUTH LOGIN" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-AUTH LOGIN" 
SMTP -> get_lines(): $str is "250-8BITMIME" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-AUTH LOGIN250-8BITMIME" 
SMTP -> get_lines(): $str is "250-BINARYMIME" 
SMTP -> get_lines(): $data is "250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-AUTH LOGIN250-8BITMIME250-BINARYMIME" 
SMTP -> get_lines(): $str is "250 CHUNKING" 
SERVER -> CLIENT: 250-VI1PR07CA0176.outlook.office365.com Hello [83.52.45.225]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-AUTH LOGIN250-8BITMIME250-BINARYMIME250 CHUNKING 
Auth method requested: UNKNOWN 
Auth methods available on the server: LOGIN 
Auth method selected: LOGIN 
CLIENT -> SERVER: AUTH LOGIN 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "334 VXNlcm5hbWU6" 
SERVER -> CLIENT: 334 VXNlcm5hbWU6 
CLIENT -> SERVER: YmlAbGl6em8ubmV0 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "334 UGFzc3dvcmQ6" 
SERVER -> CLIENT: 334 UGFzc3dvcmQ6 
CLIENT -> SERVER: MTIzQmkzMjE= 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "235 2.7.0 Authentication successful target host DB5PR07MB0776.eurprd07.prod.outlook.com" 
SERVER -> CLIENT: 235 2.7.0 Authentication successful target host DB5PR07MB0776.eurprd07.prod.outlook.com 
CLIENT -> SERVER: MAIL FROM:<[email protected]> 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "250 2.1.0 Sender OK" 
SERVER -> CLIENT: 250 2.1.0 Sender OK 
CLIENT -> SERVER: RCPT TO:<[email protected]> 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "250 2.1.5 Recipient OK" 
SERVER -> CLIENT: 250 2.1.5 Recipient OK 
CLIENT -> SERVER: DATA 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "354 Start mail input; end with <CRLF>.<CRLF>" 
SERVER -> CLIENT: 354 Start mail input; end with <CRLF>.<CRLF> 
CLIENT -> SERVER: Date: Thu, 20 Apr 2017 08:14:03 +0000 
CLIENT -> SERVER: To: Victor <[email protected]> 
CLIENT -> SERVER: From: B2b <[email protected]> 
CLIENT -> SERVER: Subject: 
CLIENT -> SERVER: Message-ID: <[email protected]> 
CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.23 (https://github.com/PHPMailer/PHPMailer) 
CLIENT -> SERVER: MIME-Version: 1.0 
CLIENT -> SERVER: Content-Type: multipart/alternative; 
CLIENT -> SERVER: boundary="b1_08f3700c117905f7e610eba801ee6741" 
CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 
CLIENT -> SERVER: 
CLIENT -> SERVER: This is a multi-part message in MIME format. 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_08f3700c117905f7e610eba801ee6741 
CLIENT -> SERVER: Content-Type: text/plain; charset=us-ascii 
CLIENT -> SERVER: 
CLIENT -> SERVER: prueba 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_08f3700c117905f7e610eba801ee6741 
CLIENT -> SERVER: Content-Type: text/html; charset=us-ascii 
CLIENT -> SERVER: 
CLIENT -> SERVER: prueba 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_08f3700c117905f7e610eba801ee6741-- 
CLIENT -> SERVER: 
CLIENT -> SERVER: . 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "250 2.6.0 <[email protected]> [InternalId=82575041234541, Hostname=DB5PR07MB0776.eurprd07.prod.outlook.com] 2837 bytes in 0.502, 5.511 KB/sec Queued mail for delivery" 
SERVER -> CLIENT: 250 2.6.0 <[email protected]> [InternalId=82575041234541, Hostname=DB5PR07MB0776.eurprd07.prod.outlook.com] 2837 bytes in 0.502, 5.511 KB/sec Queued mail for delivery 
CLIENT -> SERVER: QUIT 
SMTP -> get_lines(): $data is "" 
SMTP -> get_lines(): $str is "221 2.0.0 Service closing transmission channel" 
SERVER -> CLIENT: 221 2.0.0 Service closing transmission channel 
Connection: closed 

而这种代码在Ruby中:

配置

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    :address =>    'smtp.office365.com', 
    :port =>     587, 
    :user_name =>   '[email protected]', 
    :password =>    'a', 
    :authentication =>  :login, 
    :enable_starttls_auto => true 
} 

观察者

class UserObserver < ActiveRecord::Observer 
    def after_create(user) 
    UserNotifier.deliver_signup_notification(user) 
    end 

的ActionMailer

def signup_notification(user) 
    setup_email(user) 
    @subject += _('New B2B Account') 
    the_site = get_proper_url(user) 
    @body[:url] = "http://#{the_site}/activate/#{user.activation_code}" 
    @body[:current_user] = user 
end 

def setup_email(user) 
    the_site = get_proper_url(user) 
    @recipients = "#{user.email}" 
    @from  = "#{ADMINEMAIL}" 
    @subject  = "[#{the_site}] " 
    @bcc  = "#{ADMINEMAIL}" 
    @sent_on  = Time.now 
    @body[:user] = user 
end 

和红宝石返回此:

Net::SMTPAuthenticationError in UsersController#create 

504 5.7.4 Unrecognized authentication type [HE1PR02CA0117.eurprd02.prod.outlook.com] 
RAILS_ROOT: C:/alhambrab2b/config/.. 

Application Trace | Framework Trace | Full Trace 
c:/ruby/lib/ruby/1.8/net/smtp.rb:577:in `auth_plain' 
c:/ruby/lib/ruby/1.8/net/smtp.rb:571:in `__send__' 
c:/ruby/lib/ruby/1.8/net/smtp.rb:571:in `authenticate' 
c:/ruby/lib/ruby/1.8/net/smtp.rb:411:in `do_start' 
c:/ruby/lib/ruby/1.8/net/smtp.rb:378:in `start' 
c:/ruby/lib/ruby/1.8/net/smtp.rb:316:in `start' 
c:/ruby/lib/ruby/gems/1.8/gems/actionmailer-1.3.6/lib/action_mailer/base.rb:565:in `perform_delivery_smtp' 
c:/ruby/lib/ruby/gems/1.8/gems/actionmailer-1.3.6/lib/action_mailer/base.rb:451:in `send' 
c:/ruby/lib/ruby/gems/1.8/gems/actionmailer-1.3.6/lib/action_mailer/base.rb:451:in `deliver!' 
c:/ruby/lib/ruby/gems/1.8/gems/actionmailer-1.3.6/lib/action_mailer/base.rb:333:in `method_missing' 
C:/alhambrab2b/app/models/user_observer.rb:3:in `after_create' 
C:/alhambrab2b/app/controllers/users_controller.rb:95:in `create' 
C:/alhambrab2b/app/controllers/users_controller.rb:94:in `create' 

我试图改变config.action_mailer.smtp_settings.authentication到:朴实:cram_md5始终返回相同的。

回答

0

尝试设置openssl_verify_mode"none",如:

conf.smtp_settings = { 
    address: "<server>", 
    domain: "<domain>", 
    user_name: "<user>", 
    password: "<your_password>", 
    authentication: :login, 
    openssl_verify_mode: "none" 
}