Recommended Free Tools
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
For unattended CI/CD email tests, use a dedicated Microsoft 365 shared mailbox and a separate Microsoft Entra application identity. The most controllable design is app-only Microsoft Graph: grant the application only the roles the tests need, restrict that service principal to the test mailbox with Exchange Online RBAC for Applications, and verify the scope before sending. Put a unique build identifier in every message, then assert delivery, the from identity, subject, and correlation value. Add a deliberate out-of-scope test so an accidental permission expansion fails in CI rather than in production.
Delegated Graph and SMTP OAuth are valid alternatives when the system under test requires them, but they have different sender semantics and authorization prerequisites. The sections below show how to choose a model, configure it, build deterministic checks, and diagnose the failures that commonly appear in pipelines.
What architecture should a CI/CD test use for an O365 shared mailbox?
Separate the mailbox, application identity, and recipient used by automation from production resources. A typical flow is: the pipeline obtains a certificate or secret for its Entra application, requests an app-only token, sends through Microsoft Graph, and polls a controlled recipient or test mailbox for the message. Exchange Online RBAC for Applications limits the application to the mailbox under test.
- Mailbox: create one shared mailbox specifically for automated tests. Keep production mailboxes outside its access scope.
- Application: register a dedicated Entra application for CI/CD rather than reusing a developer or production identity.
- Credential: store a certificate (preferred) or client secret in the CI/CD platform’s secret manager. Never commit either value to source control or print tokens in logs.
- Authorization boundary: assign the minimum Microsoft Graph application roles and then apply an Exchange RBAC resource scope containing only the test mailbox.
- Assertions: include a build ID, commit SHA, and timestamp in each message so the test can distinguish its own delivery from older mail.
This arrangement gives an unattended job predictable authentication while preserving a testable boundary: the same identity that should send to the test mailbox must be denied when it targets a mailbox outside the scope.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Which permission model is right: Graph app-only, Graph delegated, or SMTP OAuth?
Choose based on how the product sends mail and whether the job can run under a signed-in user. App-only Graph is generally the cleanest model for a headless pipeline; delegated Graph is appropriate when the behavior being tested depends on a user token; SMTP OAuth is useful for software that speaks SMTP rather than Graph.
| Model | Unattended operation | Least-privilege scoping | Sender semantics | Protocol and consent | Observability and propagation |
|---|---|---|---|---|---|
| Graph app-only | Designed for service-to-service jobs; no interactive sign-in. | Grant the Mail.Send application role, add read access only when verification needs it, and scope the service principal to selected mailboxes with Exchange RBAC for Applications. |
The application sends as the target mailbox. The mailbox’s address is the sender presented to recipients. | Uses Microsoft Graph. A tenant administrator must grant application consent. | Graph responses and request IDs can be captured in logs. Exchange RBAC changes may take 30 minutes to 2 hours to become effective, depending on recent application use. |
| Graph delegated | Requires a signed-in user context or a delegated token, so it is less suitable for a purely headless job. | Mail.Send.Shared lets an application send as the signed-in user and on behalf of others, but the signed-in user must also have Exchange Send As or Send on Behalf permission on the shared mailbox. |
Send As presents the shared mailbox as the sender. Send on Behalf exposes the relationship between the user and the shared mailbox. | Uses Graph and user permissions; mailbox delegation is a separate Exchange authorization decision. | Failures can originate in either the delegated token or Exchange mailbox rights, so record both the Graph error and the effective user. |
| SMTP OAuth | Supports client-credential authentication for SMTP-speaking systems. | Requires the SMTP.SendAsApp application permission and the corresponding Exchange authorization; OAuth does not bypass mailbox rights. |
Follows SMTP’s authenticated sender and Exchange’s Send As authorization. Validate the resulting From header rather than assuming it. | Useful when the system under test cannot use Graph. Tenant administration and consent are still required. | SMTP protocol responses provide less Graph-specific telemetry, so retain SMTP status, server response, and the pipeline correlation ID. |
Do not grant both broad Graph and SMTP rights merely to make a test pass. Select the protocol the application actually uses, grant its minimum permission, and keep a separate negative test for an unauthorized mailbox.
How do I configure app-only Graph access safely?
Configure the identity and Exchange scope in separate, auditable steps. The order matters: an application role without Exchange mailbox scope can be too broad, while a scope without the required Graph role cannot send.
1. Create a dedicated shared mailbox
Use a mailbox whose only purpose is automated testing. Restrict human access to administrators and the test owners, document its address, and decide which controlled recipient will receive messages. Do not route test traffic to customer addresses.
2. Register the pipeline application
Create a separate Entra application registration for the pipeline. Generate a certificate when the CI/CD system can protect one; otherwise create a client secret with a documented expiration date. Put the private material in the CI/CD secret manager and expose it to the job only for the send-and-verify step.
3. Add only the Graph roles the test needs
For app-only sending, start with the Mail.Send application permission and obtain tenant administrator consent. Add a mail-read application permission only if the test must retrieve a message from a mailbox; do not add read access simply because it is convenient. A missing Mail.Send grant causes Exchange Online to reject the send request, commonly as HTTP 403.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
4. Define an Exchange RBAC resource scope
Use Exchange Online RBAC for Applications to bind the service principal to the dedicated test mailbox. The scope should contain the mailbox under test and no production mailbox. Keep the scope definition and its change history with the infrastructure configuration so a reviewer can see exactly which resources the identity can access.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →5. Verify authorization before the first message
Run the Exchange authorization test against the actual service principal and mailbox:
Test-ServicePrincipalAuthorization -Identity <service principal> -Resource <target mailbox>
Fail the pipeline with a configuration diagnosis if the result is not authorized. This command is useful immediately after a scope change because it bypasses the permission-cache delay that can make a correctly configured application look unauthorized during the first attempts.
How do I send and verify a message in the pipeline?
Make the test data and assertions deterministic. Every run should create a message that can be found without relying on arrival order or a human-readable subject alone.
- Build a correlation value. Combine the CI build ID, commit SHA, and a timestamp into a value that is unique for the run. Keep the value short enough for a subject line, and also place it in the body or a custom test header your application preserves.
- Request an app-only token. Use the application’s certificate or secret through the CI/CD secret manager. Do not echo the token, client assertion, or secret in diagnostic output.
- Send through the application’s real protocol. For a Graph-based product, call its send-mail operation with the shared mailbox as the target and the controlled recipient as the destination. For an SMTP product, use the OAuth client-credential flow and the SMTP submission path. Do not silently switch protocols in the test, because that would test a different authorization path.
- Capture request diagnostics. Record the build ID, protocol status, and Graph request ID (or the SMTP server response). Redact access tokens, message bodies containing sensitive values, and any credential material.
- Poll with a deadline. Search the recipient or test mailbox for the correlation value at fixed intervals, stopping at a bounded deadline. A bounded loop prevents a lost message from consuming an entire build agent.
- Assert the recipient and delivery result. Confirm that the expected recipient received exactly the message associated with the current run. If your application is expected to copy mail to Sent Items, verify that documented behavior separately rather than assuming every send creates a copy.
- Assert sender identity. Check the actual
fromvalue and, where relevant, the sender metadata that distinguishes Send As from Send on Behalf. A successful HTTP response alone does not prove that the visible sender is correct. - Assert content and correlation. Match the subject, build ID, commit SHA, and any required body marker. Reject a message that happens to have the right subject but belongs to an earlier run.
- Clean up by correlation value. Delete or archive only messages created by the current test. Retain the minimum metadata needed to diagnose a failed build and set a retention policy for the test mailbox.
If the test reads mail with Graph, grant the corresponding read application role and keep that role scoped to the same test resources. If verification uses a separate recipient mailbox, scope and protect that mailbox as carefully as the sending mailbox.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsHow can I prove Send As and Send on Behalf behavior?
Test the two delegation modes as distinct expectations. They are not interchangeable labels: Send As makes the shared mailbox appear to be the sender, while Send on Behalf exposes that a user sent for the mailbox.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Send As test
Use a delegated token whose signed-in identity has Exchange Send As permission on the shared mailbox, or use an app-only design that sends as the mailbox. The assertion should find the shared mailbox address in the visible from field and should not treat the user’s address as the sender. This is the appropriate check when recipients must see only the shared mailbox identity.
Send on Behalf test
Grant the signed-in identity Exchange Send on Behalf permission and send with delegated Graph. Assert the mailbox and user relationship in the resulting message metadata. A test that checks only delivery can pass even when the product accidentally changed from Send on Behalf to Send As, so include the sender-semantic assertion whenever that distinction affects workflows or compliance.
Permission-negative tests
Remove one of the required Exchange rights in a non-production test setup and expect an authorization failure. For app-only Graph, target a mailbox outside the RBAC resource scope and expect denial. These tests demonstrate that a successful send is caused by the intended permission path rather than an unnoticed organization-wide grant.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Why do permission changes sometimes fail immediately after configuration?
Exchange Online can cache application authorization. Microsoft documents a propagation window of 30 minutes to 2 hours, depending on recent app usage, for RBAC permission changes. During that window, distinguish a real scope mistake from delayed enforcement instead of repeatedly changing permissions.
- Run the authorization command first. If
Test-ServicePrincipalAuthorizationsays the mailbox is outside the scope, correct the RBAC configuration. If it reports authorization while Graph still returns 403, propagation is a plausible explanation. - Confirm administrator consent. Check that the exact application registration used by the pipeline has the required application role, not a similarly named development registration.
- Check the target mailbox. Verify the resource string and mailbox address used by the test match the one in the RBAC scope. A typo can look like a permission problem.
- Wait without widening access. Do not grant organization-wide mailbox access as a temporary workaround. Retry on a bounded schedule and preserve the original request ID and authorization output.
- Inspect HTTP 403 details. A 403 from Graph commonly means the application lacks
Mail.Sendconsent or the Exchange authorization path rejected the resource. Capture the error code and request ID while removing tokens from logs.
What should I check when a test reports the wrong sender?
First determine whether the test used an app-only or delegated token, then inspect the Exchange rights associated with that identity. A delegated Mail.Send.Shared grant by itself is insufficient: the signed-in user must also have Send As or Send on Behalf permission on the shared mailbox.
- Decode the non-secret token claims in a secure diagnostic context and confirm the tenant, application or user identity, and permission type.
- Check that the mailbox address in the send request is the intended shared mailbox, not the user’s default mailbox.
- For delegated tests, verify the exact Exchange delegation mode and remove conflicting rights in the test fixture if you need an unambiguous result.
- Inspect the received message’s
fromand on-behalf metadata rather than relying on the API response status. - Repeat with a fresh correlation ID after permissions settle, because an old message can make a sender assertion appear inconsistent.
How should SMTP OAuth be handled in CI/CD?
Use SMTP OAuth only when the system under test requires SMTP. Microsoft documents the SMTP.SendAsApp application permission with client credentials and tenant administrator consent; the permission is not a bypass around Exchange authorization.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Configure the SMTP identity
Register a separate application, obtain administrator consent for SMTP.SendAsApp, and authorize the application to send as the test mailbox. Keep this identity separate from a Graph identity when different teams own the protocols, so revoking one path does not silently affect the other.
Test protocol-level behavior
Submit the message through the same SMTP library and TLS settings used by the product. Record the SMTP status and server response, then verify the delivered message’s sender, recipient, subject, and correlation value. A successful SMTP submission is not proof that the final visible From address matches the requirement.
Keep the negative case
Attempt a send as a mailbox not authorized for the SMTP application and expect rejection. If that attempt succeeds, stop the pipeline and investigate the Exchange authorization scope before allowing any production deployment.
How do I make mailbox polling reliable instead of flaky?
Mailbox delivery is asynchronous, so make the test tolerant of normal delay without allowing an infinite wait. Use a fixed polling interval, a maximum number of attempts or a deadline, and a final diagnostic snapshot.
- Search by the unique correlation value first; subject-only searches can match an earlier build.
- Use the recipient, sender, and a recent time window as additional filters when the mailbox contains unrelated test traffic.
- After each unsuccessful poll, record attempt number and elapsed time, not the entire mailbox contents.
- On timeout, report whether the send API succeeded, whether authorization was confirmed, and whether any partial match was found.
- Ensure parallel builds cannot reuse the same correlation value. Include the build system’s unique run identifier.
Keep retry policy in configuration so teams can adjust it for their tenant’s observed delivery latency without changing test logic. A timeout should fail the test; it should not trigger an unbounded resend that creates duplicate messages.
Free tools Windows power users keep installed
One-click scans. No signup required.
What security controls belong around a shared-mailbox test?
Automation mailboxes often receive broad application permissions, so treat them as production-like identities even when their messages are synthetic.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
- Use a separate tenant mailbox or isolated test mailbox where organizational policy permits, and never include real customer data in test messages.
- Prefer certificates over long-lived client secrets, rotate credentials through the CI/CD secret manager, and alert before expiration.
- Keep Graph application roles and Exchange RBAC scopes under code review. A scope change should identify the mailbox and business reason.
- Limit who can read the mailbox, its CI/CD secrets, and failed-build artifacts.
- Redact tokens, authorization headers, message bodies, and personal addresses from logs. Retain Graph request IDs, SMTP responses, and authorization-test output for diagnosis.
- Use separate identities for development, staging, and production pipelines so a test change cannot expand access to live mailboxes.
How should the pipeline fail and recover?
Classify failures so engineers fix the cause rather than rerunning blindly. Authentication failures require a credential or token fix; authorization failures require Graph consent or Exchange scope changes; delivery timeouts require investigation of routing, recipient availability, or service delay.
| Symptom | Likely cause | Action |
|---|---|---|
| HTTP 401 or token acquisition failure | Expired certificate or secret, wrong tenant, or malformed client credentials. | Rotate the credential in the secret manager, verify tenant configuration, and rerun without printing the token. |
| HTTP 403 from Graph | Mail.Send was not consented, the identity is wrong, or the mailbox is outside the Exchange RBAC scope. |
Run Test-ServicePrincipalAuthorization, check application consent, and correct only the intended scope. |
| Delegated send rejected | The token has Mail.Send.Shared but the user lacks Exchange Send As or Send on Behalf rights. |
Grant the required mailbox permission in the test environment and assert the intended sender semantics. |
| Send succeeds but sender is wrong | The test used a different identity or delegation mode than expected. | Inspect the effective identity and message metadata; do not weaken the assertion. |
| No message before deadline | Recipient routing delay, incorrect recipient, search filter mismatch, or a send that never completed. | Correlate API status, request ID, recipient, and polling diagnostics; retry within the configured bound, then fail with evidence. |
When a permission change is known to be recent, preserve the failed run’s authorization output and retry after the documented propagation window rather than broadening access. Once the test passes, keep the negative out-of-scope case in the suite so a future infrastructure change cannot silently remove the boundary.
What is the practical decision rule for a new test suite?
Start with app-only Graph and Mail.Send when the pipeline is unattended and the product can send through Graph. Add narrowly scoped read access only for mailbox verification, and enforce the mailbox boundary with Exchange RBAC for Applications. Choose delegated Graph when the behavior under test explicitly depends on a signed-in user’s Send As or Send on Behalf relationship. Choose SMTP OAuth only when SMTP compatibility is itself part of the requirement.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Whichever model you select, make authorization a preflight check, make every message traceable to one build, assert the visible sender as well as delivery, and prove denial against a mailbox the identity should not reach. That combination tests both functionality and the security configuration that makes the automation safe.
Frequently Asked Questions
Can one shared mailbox be used by several parallel CI builds?
It can, but each build must use a globally unique correlation value and cleanup must filter on that value. If concurrent traffic makes diagnosis difficult, allocate one mailbox per environment or serialize only the mailbox-verification stage while leaving other tests parallel.
Does granting Mail.Send let an app read messages for verification?
No. Sending and reading are separate application permissions. Add a mail-read role only when the verification design retrieves messages, and keep that access within the same Exchange resource boundary.
What should be retained when a mailbox test fails?
Keep the build and commit identifiers, protocol status, Graph request ID or SMTP response, authorization-test output, and the polling timeline. Redact tokens, secrets, and message content that could contain personal information.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11How can I prevent old test messages from causing false positives?
Put a run-specific value in both the subject and body, filter by that value and the expected recipient, and require exactly one current-run match. Delete or archive messages by correlation value after the assertions complete.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

