Zimbra API Integration
This skill should be used when the user asks about "SOAP API", "REST API", "Zimbra LDAP", "authentication token", "preauth", "ZCS API", "AdminService", "MailService", "zmsoap", or mentions programmatic access to Zimbra. Covers SOAP, REST, and LDAP interfaces for Zimbra integration.
Best use case
Zimbra API Integration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
This skill should be used when the user asks about "SOAP API", "REST API", "Zimbra LDAP", "authentication token", "preauth", "ZCS API", "AdminService", "MailService", "zmsoap", or mentions programmatic access to Zimbra. Covers SOAP, REST, and LDAP interfaces for Zimbra integration.
Teams using Zimbra API Integration should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/zimbra-api-integration/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Zimbra API Integration Compares
| Feature / Agent | Zimbra API Integration | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
This skill should be used when the user asks about "SOAP API", "REST API", "Zimbra LDAP", "authentication token", "preauth", "ZCS API", "AdminService", "MailService", "zmsoap", or mentions programmatic access to Zimbra. Covers SOAP, REST, and LDAP interfaces for Zimbra integration.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Zimbra API Integration
Guide for integrating with Zimbra using SOAP API, REST API, and LDAP queries.
## API Overview
Zimbra provides multiple integration interfaces:
| Interface | Use Case | Port |
|-----------|----------|------|
| SOAP API | Full functionality, admin operations | 7071 (admin), 443 (user) |
| REST API | Calendar, contacts, documents | 443 |
| GraphQL | Modern web client (9.x+) | 443 |
| LDAP | Directory queries, provisioning | 389 |
## SOAP API
### Authentication
#### User Authentication
```xml
<!-- AuthRequest -->
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<AuthRequest xmlns="urn:zimbraAccount">
<account by="name">user@domain.com</account>
<password>userpassword</password>
</AuthRequest>
</soap:Body>
</soap:Envelope>
```
Response provides `authToken` for subsequent requests.
#### Admin Authentication
```xml
<!-- Admin AuthRequest (port 7071) -->
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<AuthRequest xmlns="urn:zimbraAdmin">
<account by="name">admin@domain.com</account>
<password>adminpassword</password>
</AuthRequest>
</soap:Body>
</soap:Envelope>
```
#### Preauth (SSO)
Generate preauth token for seamless login:
```python
import hashlib
import hmac
import time
def generate_preauth(account, preauth_key, timestamp=None, expires=0):
"""Generate Zimbra preauth token"""
if timestamp is None:
timestamp = int(time.time() * 1000)
# Format: account|by|expires|timestamp
data = f"{account}|name|{expires}|{timestamp}"
signature = hmac.new(
preauth_key.encode(),
data.encode(),
hashlib.sha1
).hexdigest()
return {
'account': account,
'timestamp': timestamp,
'expires': expires,
'preauth': signature
}
```
```xml
<!-- PreauthRequest -->
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<AuthRequest xmlns="urn:zimbraAccount">
<account by="name">user@domain.com</account>
<preauth timestamp="1234567890000" expires="0">computed-signature</preauth>
</AuthRequest>
</soap:Body>
</soap:Envelope>
```
### Common SOAP Requests
#### Get Account Info
```xml
<GetAccountInfoRequest xmlns="urn:zimbraAccount">
<account by="name">user@domain.com</account>
</GetAccountInfoRequest>
```
#### Search Messages
```xml
<SearchRequest xmlns="urn:zimbraMail" types="message" limit="100">
<query>in:inbox is:unread</query>
</SearchRequest>
```
#### Send Message
```xml
<SendMsgRequest xmlns="urn:zimbraMail">
<m>
<e t="t" a="recipient@domain.com"/>
<su>Subject</su>
<mp ct="text/plain">
<content>Message body</content>
</mp>
</m>
</SendMsgRequest>
```
#### Create Appointment
```xml
<CreateAppointmentRequest xmlns="urn:zimbraMail">
<m>
<inv>
<comp name="Meeting">
<s d="20240115T100000" tz="America/New_York"/>
<e d="20240115T110000" tz="America/New_York"/>
</comp>
</inv>
<su>Team Meeting</su>
</m>
</CreateAppointmentRequest>
```
### Using zmsoap
Command-line SOAP client:
```bash
# User request
zmsoap -z -m user@domain.com GetInfoRequest
# Admin request
zmsoap -z -a admin@domain.com GetAllAccountsRequest
# With specific namespace
zmsoap -z -t account GetAccountInfoRequest @by=name @account=user@domain.com
# Search
zmsoap -z -m user@domain.com SearchRequest @types=message query "in:inbox"
```
## REST API
### URL Patterns
```
# Calendar (iCal)
https://mail.domain.com/home/user@domain.com/calendar?fmt=ics
# Contacts (vCard)
https://mail.domain.com/home/user@domain.com/contacts?fmt=vcf
# Briefcase files
https://mail.domain.com/home/user@domain.com/Briefcase/file.pdf
# Search results
https://mail.domain.com/home/user@domain.com/?fmt=json&query=in:inbox
```
### Authentication Methods
```bash
# Basic auth
curl -u user@domain.com:password \
"https://mail.domain.com/home/user@domain.com/calendar?fmt=ics"
# Auth token cookie
curl -b "ZM_AUTH_TOKEN=authtoken" \
"https://mail.domain.com/home/user@domain.com/calendar"
# Preauth URL
curl "https://mail.domain.com/service/preauth?account=user@domain.com×tamp=...&preauth=..."
```
### Common REST Operations
```bash
# Export calendar
curl -u user:pass "https://mail/home/user/calendar?fmt=ics" > calendar.ics
# Import contacts
curl -u user:pass -X POST \
-H "Content-Type: text/vcard" \
--data-binary @contacts.vcf \
"https://mail/home/user/contacts"
# Upload to Briefcase
curl -u user:pass -X PUT \
--data-binary @document.pdf \
"https://mail/home/user/Briefcase/document.pdf"
# Get folder structure
curl -u user:pass "https://mail/home/user/?fmt=json&view=folder"
```
## LDAP Integration
### Connection Parameters
```bash
# Get LDAP password
zmlocalconfig -s -m nokey zimbra_ldap_password
# LDAP URL
ldap://localhost:389
# Base DN
zimbra
```
### Common Queries
```bash
# Search all accounts
ldapsearch -x -H ldap://localhost:389 \
-D "uid=zimbra,cn=admins,cn=zimbra" \
-w "$(zmlocalconfig -s -m nokey zimbra_ldap_password)" \
-b "ou=people,dc=domain,dc=com" \
"(objectClass=zimbraAccount)"
# Find user by email
ldapsearch -x -H ldap://localhost:389 \
-D "uid=zimbra,cn=admins,cn=zimbra" \
-w "$(zmlocalconfig -s -m nokey zimbra_ldap_password)" \
-b "" \
"(mail=user@domain.com)"
# Get domain info
ldapsearch -x -H ldap://localhost:389 \
-D "uid=zimbra,cn=admins,cn=zimbra" \
-w "$(zmlocalconfig -s -m nokey zimbra_ldap_password)" \
-b "dc=domain,dc=com" \
"(objectClass=zimbraDomain)"
```
### Python LDAP Example
```python
import ldap
# Connect
conn = ldap.initialize('ldap://zimbra-server:389')
conn.simple_bind_s('uid=zimbra,cn=admins,cn=zimbra', ldap_password)
# Search accounts
results = conn.search_s(
'ou=people,dc=domain,dc=com',
ldap.SCOPE_SUBTREE,
'(objectClass=zimbraAccount)',
['mail', 'displayName', 'zimbraAccountStatus']
)
for dn, attrs in results:
print(f"{attrs.get('mail', [b''])[0].decode()}: {attrs.get('displayName', [b''])[0].decode()}")
```
## GraphQL API (9.x+)
Modern Web Client uses GraphQL:
```graphql
# Endpoint: /graphql
# Get folders
query {
getFolder {
folders {
id
name
unread
}
}
}
# Search messages
query {
search(query: "in:inbox", types: MESSAGE, limit: 50) {
messages {
id
subject
from {
address
}
}
}
}
```
## Error Handling
### Common Error Codes
| Code | Meaning |
|------|---------|
| `account.AUTH_FAILED` | Invalid credentials |
| `account.NO_SUCH_ACCOUNT` | Account not found |
| `service.PERM_DENIED` | Insufficient permissions |
| `mail.NO_SUCH_FOLDER` | Folder not found |
| `mail.QUOTA_EXCEEDED` | Mailbox full |
### Retry Logic
```python
import time
def make_soap_request(url, body, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, data=body, timeout=30)
response.raise_for_status()
return response
except requests.exceptions.Timeout:
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
else:
raise
```
## Additional Resources
### Reference Files
- **`references/soap-api-reference.md`** - Complete SOAP namespace documentation
- **`references/ldap-schema.md`** - Zimbra LDAP schema details
### Example Files
- **`examples/soap-client.py`** - Python SOAP client wrapper
- **`examples/preauth-generator.py`** - Generate preauth tokensRelated Skills
worktree-wizard-integration
This skill should be used when the user asks to "set up worktree-wizard", "integrate worktree-wizard", "add worktree support", "create docker-compose for worktrees", "add wt labels", "configure hot-reload for Docker", "set up volume mounts", "isolate ports per worktree", "onboard project to worktree-wizard", or needs guidance on wt.base-port labels, WT_* env var patterns, slot-based port isolation, dev-mode Dockerfiles, or hot-reload configurations per framework.
upgrade-integration
Integrate Carnegie Learning's UpGrade A/B testing platform into LMS and EdTech applications. Guides setup of decision points, experiment conditions, LTI/xAPI integration, and outcome logging. Use when asked to add A/B testing, experiments, or feature flags to educational software.
tipalti-integration-specialist
Tipalti payment integration guide for payee onboarding, payment processing, webhooks, and tax compliance. Use when implementing payment features.
testcontainers-integration-tests
Use when integration tests require real infrastructure (database, message queue, cache) or when mocking infrastructure is insufficient. Defines container lifecycle, test isolation, and performance optimization for Testcontainers-based testing.
stripe-integration
Guides consistent, correct implementation of Stripe payment processing including payment flows, webhooks, subscriptions, and customer management. Use when integrating Stripe payments, setting up subscriptions, implementing webhooks, or managing customer billing.
orama-integration
Use when integrating with Orama. Links to official docs for search, indexing, answer engine. (project)
moai-context7-lang-integration
Enterprise-grade Context7 MCP integration patterns for language-specific documentation access with real-time library resolution and intelligent caching
MCP Integration
Model Context Protocol (MCP) integration specialist. Use when creating MCP server configurations, implementing MCP integrations, or optimizing MCP performance. Specializes in MCP server architecture and integration patterns.
mapbox-integration-patterns
Official integration patterns for Mapbox GL JS across popular web frameworks. Covers setup, lifecycle management, token handling, search integration, and common pitfalls. Based on Mapbox's create-web-app scaffolding tool.
lsp-integration
This skill should be used when the user asks to "add LSP server", "configure language server", "set up LSP in plugin", "add code intelligence", "integrate language server protocol", "use pyright-lsp", "use typescript-lsp", "use rust-lsp", "socket transport", "initializationOptions", mentions LSP servers, or discusses extensionToLanguage mappings. Provides guidance for integrating Language Server Protocol servers into Claude Code plugins for enhanced code intelligence.
kuroco-frontend-integration
Kurocoとフロントエンドフレームワークの統合パターンおよびAI自動デプロイメント。使用キーワード:「Kuroco Nuxt」「Kuroco Next.js」「フロントエンド連携」「Nuxt3」「Nuxt2」「App Router」「Pages Router」「SSG」「SSR」「静的生成」「コンテンツ表示」「ログイン実装」「会員登録」「signup」「KurocoPages」「フロントエンド環境構築」「Vue」「React」「useAsyncData」「$fetch」「asyncData」「composable」「useAuth」「認証状態」「プロフィール取得」「profile」「generateStaticParams」「動的ルート」「v-html」「dangerouslySetInnerHTML」「XSS対策」「サードパーティCookie」「credentials include」「AI自動デプロイ」「Kuroco自動化」「サイト登録API」「自動ビルド」「自動デプロイ」「temp-upload」「presigned URL」「S3アップロード」「artifact_url」「KurocoFront」「プレビューデプロイ」「stage_url」「add_site」「site_key」「kuroco_front/deploy」「CI/CD」「フロントエンドビルド」「ZIP配備」「自動公開」「nuxt generate」「next build」「vite build」「デプロイAPI」「一時アップロード」「署名付きURL」。Nuxt/Next.jsでのKuroco連携、認証実装、SSG/SSR設定、AI自動デプロイに関する質問で使用。
integration
Backend-Frontend integration patterns expert. Type-safe API contracts with Pydantic-Zod validation sync (Python FastAPI) or Prisma-TypeScript native (Next.js). Shadcn forms connected to backend, error handling, loading states. Use when creating full-stack features.