Search the docs
Find a page, a section, or an endpoint.
Keep your Gmail
Forwarding Gmail or Google Workspace into an agent’s address.
Your mail can stay in Gmail or Google Workspace while an agent reads it. Gmail forwards a copy to the agent's Pidgeon address, and the agent reads and answers it there. Nothing moves: your MX records, your Gmail and its history stay where they are.
It works because Pidgeon routes on the envelope recipient, not the To:
header. A forwarded message still says To: you@gmail.com, but it is
delivered to the agent's address under its original sender.
Before you start
You need an address for the agent (Addresses). If that
address accepts only its allow list, add forwarding-noreply@google.com to
the list first, or the confirmation below is refused. The details are under
Allow lists.
From Gmail
Automatic forwarding is set up in Gmail on a computer. The Gmail app has no setting for it.
- Settings → See all settings → Forwarding and POP/IMAP → Add a forwarding address. Enter the agent's address, then Next → Proceed → OK.
- Gmail sends a confirmation to the agent's address. Confirm it (Confirm the forward).
- Back in Gmail, refresh the page and open Forwarding and POP/IMAP again. Choose Forward a copy of incoming mail to, pick the agent's address, choose what happens to Gmail's copy (Keep Gmail's copy in the Inbox keeps your inbox as it was), and Save Changes.
Gmail forwards new mail only, and never what it has filed as spam. An account has one automatic forwarding address.
Only some of your mail
A filter forwards the messages that match it and nothing else. Set up the forwarding address with steps 1 and 2 first, leave automatic forwarding off, then:
- In the search box, open Show search options and enter what to match: a sender, a domain, words in the subject.
- Create filter → Forward it, choose the agent's address, and Create filter.
A filter forwards mail that arrives after you create it, not the mail already in your inbox. One filter forwards to one address.
From Google Workspace
People in a Workspace organisation set it up from Gmail, as above, unless an administrator has turned it off. The setting is under Admin console → Apps → Google Workspace → Gmail → End User Access → Automatic forwarding, and it can also be limited to addresses inside the organisation.
An administrator can send a copy without anybody confirming anything:
- Default routing (Apps → Google Workspace → Gmail → Default routing): match the recipients, then under Modify message choose Add more recipients and add the agent's address. The original still reaches the Gmail inbox.
- A recipient address map (Gmail → Routing) maps one address to another. Tick Also route to original destination, or Gmail stops delivering to the original.
Google says routing changes take up to 24 hours.
Confirm the forward
Gmail's confirmation arrives at the agent's address from
forwarding-noreply@google.com, with a subject that reads
Gmail Forwarding Confirmation - Receive Mail from you@gmail.com. It holds two
links and no code: one confirms the forward, the other cancels it.
The agent can wait for it and read the confirming link out of extracted:
curl -G https://pidgeon.ai/api/v1/messages/await \
-H "Authorization: Bearer $PIDGEON_API_KEY" \
-d identity_id=$IDENTITY_ID \
-d from=forwarding-noreply@google.com \
-d has_code=true \
-d timeout=120has_code counts a verification link as well as a code, so it waits past
anything else that arrives first. The confirming link is the only one marked
verification; the cancelling link comes back as other. Open the confirming
link in a browser and confirm. An agent with a browser tool can do it itself;
otherwise send the link to the person who owns the Gmail account.
Over MCP it is await_message with the same from and has_code.
Google signs the confirmation, so it passes DMARC and the from filter
matches it (Verification codes says why a from
match needs DMARC).
What the agent sees
A forwarded message reads like any other, except that the To: is your Gmail:
{
"from": { "email": "maria@northwind.example", "name": "Maria Lopez" },
"to": [{ "email": "you@gmail.com" }],
"delivered_to": "agent@yourdomain.com",
"subject": "Contract renewal for 2027",
"authentication": { "spf": "pass", "dkim": "pass", "dmarc": "pass" },
"origin": "smtp"
}from is the person who wrote, not you, so the agent answers them and sender
rules match them. Message IDs survive the forward, so a forwarded reply joins
the thread it answers.
Authentication on a forward
SPF is checked against whoever handed the message to Pidgeon, which on a
forward is Google rather than the original sender. Gmail rewrites the envelope
to your Gmail address, so SPF passes for gmail.com, not for the sender's
domain. DKIM is the original sender's signature, and a forward that does not
change the message keeps it intact. So DMARC passes when the sender signed
with its own domain, which most large senders do, and fails when it signed
nothing.
Pidgeon does not read ARC, the headers Google adds to vouch for what it checked before forwarding. A message that fails DMARC here is not rescued by Google having seen it pass.
What a failed DMARC changes:
await_messagewithfromholds the message back inheld_back.unauthenticatedunless you passinclude_unauthenticated: true.- Spam: a failed check counts against a message. A sender rule that says Never mark it as spam overrules that only when DMARC passed.
- Allow lists: below.
In the dashboard, a message whose SPF, DKIM or DMARC failed is also listed under Unauthenticated. A Workspace copy whose SPF failed is listed there even when DMARC passed.
Allow lists
An address set to accept only its allow list (Allow and block lists) judges a forward by its original sender:
- List the people who write to you, not your Gmail address. Listing
you@gmail.comlets nothing in, because no forwarded message is from it. - A listed sender gets in only when DMARC passes. Mail forwarded from a domain that signs nothing is refused, even from somebody on the list.
- List
forwarding-noreply@google.combefore you add the forwarding address, or Gmail's confirmation is refused.
Answering
The agent answers as its own address. The person who wrote sees a reply from
agent@yourdomain.com, not from your Gmail, and you are not copied unless the
agent adds you. Pidgeon cannot send as you@gmail.com: it does not hold
Google's signing keys, so that mail would fail DMARC, and an address sends
only as itself or an address routed to it.
Gmail's Send mail as goes the other way. It lets you answer from Gmail as the agent's address, through Pidgeon:
- In Pidgeon, create an app password for the address (IMAP and SMTP).
- In Gmail: Settings → See all settings → Accounts and import → Send mail as → Add another email address. Enter the agent's address.
- Give Gmail the SMTP server, below.
- Gmail sends a verification link to the agent's address. Read it the same way as the forwarding confirmation, and open it.
SMTP server smtp.pidgeon.ai
Port 465, SSL
Username the agent's full address
Password the app passwordWhat it costs: the app password lives in your Google account, and it can read the agent's inbox and send as its address. Revoke it in Pidgeon and Gmail can no longer send as the agent. Mail you send this way counts against the address's daily sending limit, and a reply you send in a thread the agent was answering hands that thread to you.
Answering as your Workspace address, support@acme.com rather than the
agent's own, is not built yet. Today the agent answers as its Pidgeon address.