Hello everyone, I would like to configure my Office365 account on ITFLOW, but I can’t seem to do it. I’ve tried enabling SMTP and using an application password, but I don’t get any error messages, just emails pending. Same for IMAP when I test. No error messages either. Where can I view the logs? Thank you for your help.
SMTP - Application password for Office365
I haven't tried this yet, since I use Google Workspace primarily, but here's a Python-based proxy IMAP/SMTP service that can connect to M365…
Thank you all for your help. In Exchange, you can set up connectors to allow sending emails without authentication by verifying the sender’s IP address. I’m currently doing this with Tactical RMM, and it works. However, I’ll be setting up a proxy to manage OAuth. Thanks again for your help.
- Edited
AlexSela Microsoft 365 Exchange connectors work great for outbound mail but it doesn't solve the issue where tickets are monitored via mailbox such as support@company.com
@cybershieldms has provided an excellent solution for that
Re IMAP, see the reply from cybershieldms
- Edited
Chatgpt on implementing OAuth2 - I'm just curious to see what @johnny and @wrongecho have to say about it - check out the details
Given that you use **PHPMailer** and **PHP Mime Mail Parser**, you can definitely integrate them with OAuth2 for your Microsoft 365 account. Here's how to approach the task using these libraries:
### 1. **Sending Emails with PHPMailer and OAuth2**
Since Microsoft 365 requires OAuth2 for authentication, you need to configure **PHPMailer** to authenticate with OAuth2.
#### Install PHPMailer and Required Dependencies
You probably already have PHPMailer, but if not, install it along with the OAuth2 client:
```bash
composer require phpmailer/phpmailer league/oauth2-client
```
#### OAuth2 Configuration for Sending Emails
Here’s an updated example using **PHPMailer** to send emails using OAuth2:
```php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use League\OAuth2\Client\Provider\GenericProvider;
require 'vendor/autoload.php';
$oauthProvider = new GenericProvider([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'https://yourdomain.com/redirect',
'urlAuthorize' => 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/authorize',
'urlAccessToken' => 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes' => 'https://graph.microsoft.com/.default offline_access'
]);
// Obtain the access token (if already obtained, retrieve from session or storage)
$accessToken = $_SESSION['access_token'] ?? null;
// Initialize PHPMailer
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->SMTPAuth = true;
$mail->AuthType = 'XOAUTH2';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
// Set OAuth details
$mail->setOAuth(new \\PHPMailer\\PHPMailer\\OAuth([
'provider' => $oauthProvider,
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'refreshToken' => 'YOUR_REFRESH_TOKEN',
'userName' => 'youremail@yourdomain.com', // Email associated with your MS365 account
'accessToken' => $accessToken
]));
// Recipients
$mail->setFrom('you@example.com', 'Your Name');
$mail->addAddress('recipient@example.com');
// Content
$mail->isHTML(true);
$mail->Subject = 'Subject';
$mail->Body = 'Body of the email';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
```
This setup uses **OAuth2** to authenticate with the Microsoft 365 SMTP server. The access token is retrieved using the OAuth2 client (like `league/oauth2-client`), and PHPMailer uses the token to send the email.
### 2. **Receiving Emails with Microsoft Graph API and PHP Mime Mail Parser**
**Microsoft Graph API** will be used to fetch emails, and **PHP Mime Mail Parser** will parse the email content. Here's how you can fetch and parse emails:
#### Fetching Emails with Microsoft Graph API
First, you need to authenticate using OAuth2 (similar to the setup above for sending emails) and use the Graph API to retrieve messages:
```php
$accessToken = $_SESSION['access_token'];
// Fetch messages using Graph API
$ch = curl_init('https://graph.microsoft.com/v1.0/me/messages');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$emails = json_decode($result, true);
```
#### Parsing Emails with PHP Mime Mail Parser
Once you have the raw email content, you can pass it to PHP Mime Mail Parser for parsing:
```php
use PhpMimeMailParser\Parser;
$parser = new Parser();
// Assuming $emails['value'][0]['body']['content'] contains the raw email content
$parser->setText($emails['value'][0]['body']['content']);
// Get the subject, body, and attachments
$subject = $parser->getHeader('subject');
$body = $parser->getMessageBody('text'); // You can also use 'html' for HTML emails
$attachments = $parser->getAttachments();
// Display or process the email content
echo "Subject: " . $subject . "\n";
echo "Body: " . $body . "\n";
// Handle attachments
foreach ($attachments as $attachment) {
$attachment->save('/path/to/save/' . $attachment->getFilename());
}
```
### Summary
- **PHPMailer** can send emails with Microsoft 365 via OAuth2, using the setup mentioned above.
- **PHP Mime Mail Parser** will work with the email content fetched from Microsoft Graph API. You can use the Graph API to retrieve emails and then parse them with PHP Mime Mail Parser.
This approach will allow you to integrate both sending and receiving emails into your PHP web app using modern authentication with OAuth2 for Microsoft 365.
Looks realistic to me, isn't it?
We just switched away from php mime mail parser because it's a complete cluster fuck of a library. I have no further interest in the oAuth nonsense beyond working around it.
See https://forum.itflow.org/d/1199-major-ticket-mail-parser-update/2