当前位置: 首页 > 知识库问答 >
问题:

尝试使用具有 Office 365 OAuth2 访问令牌的 swiftmailer 发送邮件时,在 SMTP 上获取身份验证失败错误

苏法
2023-03-14

我尝试使用swiftmailer和office 365发送邮件,但未能通过验证。我已经购买了office 365帐户azure订阅。我的环境是php。我完成的步骤:

  1. 创建Office 365帐户
  2. 在Azure AD中创建应用
  3. 创建客户端机密
  4. 将身份验证设置为“任何组织目录(任何Azure AD目录-多租户)中的帐户”
  5. 设置API权限
  6. 下载了Microsoft G想像sdk以生成访问令牌
  7. 我生成了访问证书,并使用swftmail传输上的it作为密码,并将身份验证类型设置为“XOAUTH2”

以下是支持上述活动的屏幕截图列表。

运动设置

API权限

我使用了“https://github.com/microsoftgraph/msgraph-sdk-php“获取accesstoken。

    $guzzle = new \GuzzleHttp\Client();
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/v2.0/token';
$token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'scope' => 'https://graph.microsoft.com/.default',
        'grant_type' => 'client_credentials',
    ],
])->getBody()->getContents());
$accessToken = $token->access_token;

以下是完整的代码

require_once 'swift/vendor/autoload.php';
require_once 'graph/vendor/autoload.php';




$tenant_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//$graphMailer = new graphMailer($tenant_id, $client_id, $secret_id);

$guzzle = new \GuzzleHttp\Client();
$url = 'https://login.microsoftonline.com/' . $tenant_id . '/oauth2/v2.0/token';
$token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $client_id,
        'client_secret' => $clientSecret,
        'scope' => 'https://graph.microsoft.com/.default',
        'grant_type' => 'client_credentials',
    ],
])->getBody()->getContents());
$accessToken = $token->access_token;


// echo $accessToken;




$transport = (new Swift_SmtpTransport('smtp.office365.com', 587, 'tls'))
    ->setAuthMode('XOAUTH2')
   ->setUsername('sender@Testmail699.onmicrosoft.com')
    ->setPassword($accessToken)
;

$transport->start();

$mailer = new Swift_Mailer($transport);

$message = (new Swift_Message('Wonderful Subject'))
  ->setFrom(['sender@Testmail699.onmicrosoft.com' => 'Anish V M'])
  ->setTo(['toaddresss@gmail.com', 'toaddresss@gmail.com' => 'Anish'])
  ->setBody('Here is the message itself')
  ;

// Send the message
$result = $mailer->send($message);

echo $result;

我想知道是否有人能给我指出正确的方向。或者告诉我是否我错过了什么。

谢谢

共有1个答案

周睿范
2023-03-14

在我的 WHM 根登录上禁用一个设置为我解决了 smtp 上身份验证失败的错误:

WHM

 类似资料:
  • 我正在尝试使用javamail和smtp发送邮件。当我从我的gmail地址发送邮件时,它对我有效。我改变了从我的交换账户发送的相同代码,但它不起作用。我正在获得身份验证失败异常。 密码 我尝试使用默认端口,即25,但那一次出现了错误,显示了错误的端口号。所以我假设端口号是对的。我尝试了ping主机和它的工作。我尝试的用户名。但总是有同样的例外。请帮我修一下。 提前谢谢 我启动了调试,得到了以下日志

  • 在过去的几天里,我一直在用我的头撞我的桌子,试图弄清楚为什么我在尝试实现通过公司的Outlook服务器发送电子邮件的Java代码时不断收到以下错误: 下面是有问题的代码: 该错误在 Transport.send(msg) 触发。任何指导将不胜感激。

  • 我们正在尝试使用OAuth2.0在我们的应用程序中登录Outlook.com,我们已经完成了应用程序AAD的注册。应用程序成功地验证了用户,并用access_token响应,现在进一步我们想从imap服务器读取电子邮件,这里我们得到了失败,请尝试和帮助我们解决这个问题。 确定Microsoft Exchange IMAP4服务已就绪。[uaboadiauabsadaamqbdaeeamaawady

  • null null “AADSTS28000:为输入参数scope提供的值无效,因为它包含多个资源。scope api://{API-application-id}/a-scope https://graph.microsoft.com/user。Read openid配置文件无效。” 这里,我们的后端是一个资源,它有一个作用域,“https://graph.microsoft.com”是另一个作

  • 更新域密码后,将不再访问 git 存储库。VS 代码和源代码树以及 Visual Studio 在拉取、推送、提取等方面返回以下错误消息。 通常会出现凭据弹出窗口,但这并没有发生。还有常见的建议… ...不起作用。