goews

package module
v2.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2022 License: MIT Imports: 14 Imported by: 1

README

EWS Exchange Web Service

Exchange Web Service client for golang

usage:

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/gunsluo/goews/v2"
)

func main() {
	c, err := goews.NewClient(
		goews.Config{
			Address:  "https://outlook.office365.com/EWS/Exchange.asmx",
			Username: "email@exchangedomain",
			Password: "password",
			Dump:     true,
			NTLM:     false,
			Domain:   "",
			SkipTLS:  false,
		},
	)
	if err != nil {
		log.Fatal("->: ", err.Error())
	}

	filename := "a.txt"
	content, err := os.ReadFile(filename)
	if err != nil {
		log.Fatal("read file: ", err.Error())
	}

	htmlBody := `<!DOCTYPE html>
<html lang="en">
<head>
  <title>Simple HTML document</title>
</head>
<body>
  <h1>The email body, as html!</h1>
</body>
</html>`

	err = c.SendEmail(
		goews.SendEmailParams{
			From:     "email@exchangedomain",
			To:       []string{"ji.luo@target-energysolutions.com"},
			Cc:       []string{"junkun.ren@target-energysolutions.com"},
			Bcc:      []string{"Dongsheng.liu@target-energysolutions.com"},
			Subject:  "An email subject",
			Body:     htmlBody,
			BodyType: goews.BodyTypeHtml,
			FileAttachments: []goews.AttachmentParams{
				{
					Name:        filename,
					ContentType: "",
					Size:        int64(len(content)),
					Content:     content,
				},
			},
		})
	if err != nil {
		log.Fatal("err>: ", err.Error())
	}

	fmt.Println("--- success ---")
}

Note: if you are using an on-premises Exchange server (or even if you manage your servers at the cloud), you need to pass the username as AD_DOMAINNAME\username instead, for examle MYCOMANY\mhewedy.

Supported Feature matrix:

Category Operation Supported*
eDiscovery operations
Exchange mailbox data operations
CreateItem operation ✔️ (Email & Calendar)
GetUserPhoto ✔️
Availability operations
GetUserAvailability ✔️
GetRoomLists ✔️
Bulk transfer operations
Delegate management operations
Inbox rules operations
Mail app management operations
Mail tips operation
Message tracking operations
Notification operations
Persona operations
FindPeople ✔️
GetPersona ✔️
Retention policy operation
Service configuration operation
Sharing operations
Synchronization operations
Time zone operation
Unified Messaging operations
Unified Contact Store operations
User configuration operations
  • Not always 100% of fields are mapped.

Extras

Besides the operations supported above, few new operations under the namespace ewsutil has been introduced:

  • client.SendEmail
  • client.CreateEvent
  • client.ListUsersEvents
  • client.FindPeople
  • client.GetUserPhoto
  • client.GetUserPhotoBase64
  • client.GetUserPhotoURL
  • client.GetPersona

NTLM is supported as well as Basic authentication

Reference:

https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-operations-in-exchange

Documentation

Index

Constants

View Source
const (
	RequestedViewNone           = "None"
	RequestedViewMergedOnly     = "MergedOnly"
	RequestedViewFreeBusy       = "FreeBusy"
	RequestedViewFreeBusyMerged = "FreeBusyMerged"
	RequestedViewDetailed       = "Detailed"
	RequestedViewDetailedMerged = "DetailedMerged"
)
View Source
const (
	BusyTypeFree      = "Free"
	BusyTypeTentative = "Tentative"
	BusyTypeBusy      = "Busy"
	BusyTypeOOF       = "OOF"
	BusyTypeNoData    = "NoData"
)
View Source
const (
	BodyTypeHtml = "HTML"
	BodyTypeText = "Text"
)

Variables

This section is empty.

Functions

func NewError

func NewError(resp *http.Response) error

Types

type AdditionalProperties

type AdditionalProperties struct {
	FieldURI []FieldURI `xml:"t:FieldURI,omitempty"`
}

type ArrayOfAttendeeConflictData

type ArrayOfAttendeeConflictData struct {
	UnknownAttendeeConflictData     string                    `xml:"UnknownAttendeeConflictData"`
	IndividualAttendeeConflictData  string                    `xml:"IndividualAttendeeConflictData"`
	TooBigGroupAttendeeConflictData string                    `xml:"TooBigGroupAttendeeConflictData"`
	GroupAttendeeConflictData       GroupAttendeeConflictData `xml:"GroupAttendeeConflictData"`
}

type AttachmentId added in v2.1.0

type AttachmentId struct {
	Id                string `xml:"Id,attr"`
	RootItemId        string `xml:"RootItemId,attr"`
	RootItemChangeKey string `xml:"RootItemChangeKey,attr"`
}

type AttachmentParams added in v2.1.0

type AttachmentParams struct {
	AttachmentId AttachmentId
	Name         string
	ContentType  string
	Size         int64
	Content      []byte
}

type Attachments added in v2.1.0

type Attachments struct {
	Items []ItemAttachment `xml:"t:ItemAttachment,omitempty"`
	Files []FileAttachment `xml:"t:FileAttachment,omitempty"`
}

type Attendee

type Attendee struct {
	Mailbox Mailbox `xml:"t:Mailbox"`
}

type AttendeeType

type AttendeeType string
const (
	AttendeeTypeOrganizer AttendeeType = "Organizer"
	AttendeeTypeRequired  AttendeeType = "Required"
	AttendeeTypeOptional  AttendeeType = "Optional"
	AttendeeTypeRoom      AttendeeType = "Room"
	AttendeeTypeResource  AttendeeType = "Resource"
)

type Attendees

type Attendees struct {
	Attendee []Attendee `xml:"t:Attendee"`
}

type BasePoint

type BasePoint string
const (
	BasePointBeginning BasePoint = "Beginning"
	BasePointEnd       BasePoint = "End"
)

type BaseShape

type BaseShape string
const (
	BaseShapeIdOnly        BaseShape = "IdOnly"
	BaseShapeDefault       BaseShape = "Default"
	BaseShapeAllProperties BaseShape = "AllProperties"
)

type Body

type Body struct {
	BodyType string `xml:"BodyType,attr"`
	Body     []byte `xml:",chardata"`
}

type BusinessPhoneNumbers

type BusinessPhoneNumbers struct {
	PhoneNumberAttributedValue PhoneNumberAttributedValue `xml:"PhoneNumberAttributedValue"`
}

type BusyType

type BusyType string

type CalendarEvent

type CalendarEvent struct {
	StartTime            Time                 `xml:"StartTime"`
	EndTime              Time                 `xml:"EndTime"`
	BusyType             BusyType             `xml:"BusyType"`
	CalendarEventDetails CalendarEventDetails `xml:"CalendarEventDetails"`
}

type CalendarEventArray

type CalendarEventArray struct {
	CalendarEvent []CalendarEvent `xml:"CalendarEvent"`
}

type CalendarEventDetails

type CalendarEventDetails struct {
	ID            string `xml:"ID"`
	Subject       string `xml:"Subject"`
	Location      string `xml:"Location"`
	IsMeeting     bool   `xml:"IsMeeting"`
	IsRecurring   bool   `xml:"IsRecurring"`
	IsException   bool   `xml:"IsException"`
	IsReminderSet bool   `xml:"IsReminderSet"`
	IsPrivate     bool   `xml:"IsPrivate"`
}

type CalendarItem

type CalendarItem struct {
	Subject                    string      `xml:"t:Subject"`
	Body                       Body        `xml:"t:Body"`
	ReminderIsSet              bool        `xml:"t:ReminderIsSet"`
	ReminderMinutesBeforeStart int         `xml:"t:ReminderMinutesBeforeStart"`
	Start                      time.Time   `xml:"t:Start"`
	End                        time.Time   `xml:"t:End"`
	IsAllDayEvent              bool        `xml:"t:IsAllDayEvent"`
	LegacyFreeBusyStatus       string      `xml:"t:LegacyFreeBusyStatus"`
	Location                   string      `xml:"t:Location"`
	RequiredAttendees          []Attendees `xml:"t:RequiredAttendees"`
	OptionalAttendees          []Attendees `xml:"t:OptionalAttendees"`
	Resources                  []Attendees `xml:"t:Resources"`
}

type Client

type Client interface {
	SendEmail(SendEmailParams) error
	CreateHTMLEvent(to, optional []string, subject, body, location string, from time.Time, duration time.Duration) error
	CreateEvent(to, optional []string, subject, body, location string, from time.Time, duration time.Duration) error
	GetPersonaById(personaID string) (*Persona, error)
	GetPersona(r *GetPersonaRequest) (*GetPersonaResponse, error)
	GetUserPhoto(email string) (string, error)
	GetDecodingUserPhoto(email string) ([]byte, error)
	GetUserPhotoURL(email string) string
	FindPeopleByCondition(q string) ([]Persona, error)
	FindPeople(r *FindPeopleRequest) (*FindPeopleResponse, error)
	GetRoomLists() (*GetRoomListsResponse, error)
	ListUsersEvents(eventUsers []EventUser, from time.Time, duration time.Duration) (map[EventUser][]Event, error)
	SendAndReceive(body []byte) ([]byte, error)
}

func NewClient

func NewClient(config Config) (Client, error)

type Config

type Config struct {
	Address  string
	Username string
	Password string
	NTLM     bool
	Domain   string
	Dump     bool

	SkipTLS bool
	CaPath  string
}

type CreateItem

type CreateItem struct {
	XMLName                struct{}          `xml:"m:CreateItem"`
	MessageDisposition     string            `xml:"MessageDisposition,attr"`
	SendMeetingInvitations string            `xml:"SendMeetingInvitations,attr"`
	SavedItemFolderId      SavedItemFolderId `xml:"m:SavedItemFolderId"`
	Items                  Items             `xml:"m:Items"`
}

type CreateItemResponse

type CreateItemResponse struct {
	ResponseMessages ResponseMessages `xml:"ResponseMessages"`
}

type Departments

type Departments struct {
	StringAttributedValue StringAttributedValue `xml:"StringAttributedValue"`
}

type DistinguishedFolderId

type DistinguishedFolderId struct {
	// List of values:
	// https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/distinguishedfolderid
	Id string `xml:"Id,attr"`
}

type Email

type Email struct {
	Name        string `xml:"t:Name"`
	Address     string `xml:"t:Address"`
	RoutingType string `xml:"t:RoutingType"`
}

type EmailAddress

type EmailAddress struct {
	Name         string `xml:"Name"`
	EmailAddress string `xml:"EmailAddress"`
	RoutingType  string `xml:"RoutingType"`
	MailboxType  string `xml:"MailboxType"`
	ItemId       ItemId `xml:"ItemId"`
}

type Event

type Event struct {
	Start    time.Time
	End      time.Time
	BusyType BusyType
}

type EventUser

type EventUser struct {
	Email        string
	AttendeeType AttendeeType
}

type Fault

type Fault struct {
	Faultcode   string `xml:"faultcode"`
	Faultstring string `xml:"faultstring"`
	Detail      detail `xml:"detail"`
}

type FieldURI

type FieldURI struct {
	// List of possible values:
	// https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/fielduri
	FieldURI string `xml:"FieldURI,attr,omitempty"`
}

type FileAttachment added in v2.1.0

type FileAttachment struct {
	AttachmentId     AttachmentId `xml:"t:AttachmentId,omitempty"`
	Name             string       `xml:"t:Name"`
	ContentType      string       `xml:"t:ContentType,omitempty"`
	ContentId        string       `xml:"t:ContentId,omitempty"`
	ContentLocation  string       `xml:"t:ContentLocation,omitempty"`
	Size             int64        `xml:"t:Size,omitempty"`
	LastModifiedTime string       `xml:"t:LastModifiedTime,omitempty"`
	IsInline         bool         `xml:"t:IsInline"`
	IsContactPhoto   bool         `xml:"t:IsContactPhoto"`
	Content          string       `xml:"t:Content"`
}

type FindPeopleRequest

type FindPeopleRequest struct {
	XMLName             struct{}            `xml:"m:FindPeople"`
	PersonaShape        *PersonaShape       `xml:"m:PersonaShape,omitempty"`
	IndexedPageItemView IndexedPageItemView `xml:"m:IndexedPageItemView"`
	ParentFolderId      ParentFolderId      `xml:"m:ParentFolderId"`
	QueryString         string              `xml:"m:QueryString,omitempty"`
}

type FindPeopleResponse

type FindPeopleResponse struct {
	Response
	People                    People `xml:"People"`
	TotalNumberOfPeopleInView int    `xml:"TotalNumberOfPeopleInView"`
	FirstMatchingRowIndex     int    `xml:"FirstMatchingRowIndex"`
	FirstLoadedRowIndex       int    `xml:"FirstLoadedRowIndex"`
}

type FreeBusyResponse

type FreeBusyResponse struct {
	ResponseMessage ResponseMessage `xml:"ResponseMessage"`
	FreeBusyView    FreeBusyView    `xml:"FreeBusyView"`
}

type FreeBusyResponseArray

type FreeBusyResponseArray struct {
	FreeBusyResponse []FreeBusyResponse `xml:"FreeBusyResponse"`
}

type FreeBusyView

type FreeBusyView struct {
	FreeBusyViewType   string             `xml:"FreeBusyViewType"`
	MergedFreeBusy     string             `xml:"MergedFreeBusy"`
	CalendarEventArray CalendarEventArray `xml:"CalendarEventArray"`
	WorkingHours       WorkingHours       `xml:"WorkingHours"`
}

type FreeBusyViewOptions

type FreeBusyViewOptions struct {
	TimeWindow                      TimeWindow `xml:"t:TimeWindow"`
	MergedFreeBusyIntervalInMinutes int        `xml:"t:MergedFreeBusyIntervalInMinutes,omitempty"`
	RequestedView                   string     `xml:"t:RequestedView"`
}

type GetPersonaRequest

type GetPersonaRequest struct {
	XMLName   struct{}  `xml:"m:GetPersona"`
	PersonaId PersonaId `xml:"m:PersonaId"`
}

type GetPersonaResponse

type GetPersonaResponse struct {
	Response
	Persona Persona `xml:"Persona"`
}

type GetRoomListsRequest

type GetRoomListsRequest struct {
	XMLName struct{} `xml:"m:GetRoomLists"`
}

type GetRoomListsResponse

type GetRoomListsResponse struct {
	Response
	RoomLists RoomLists `xml:"RoomLists"`
}

type GetUserAvailabilityRequest

type GetUserAvailabilityRequest struct {
	XMLName             struct{}            `xml:"m:GetUserAvailabilityRequest"`
	TimeZone            TimeZone            `xml:"t:TimeZone"`
	MailboxDataArray    MailboxDataArray    `xml:"m:MailboxDataArray"`
	FreeBusyViewOptions FreeBusyViewOptions `xml:"t:FreeBusyViewOptions"`
}

type GetUserAvailabilityResponse

type GetUserAvailabilityResponse struct {
	FreeBusyResponseArray FreeBusyResponseArray `xml:"FreeBusyResponseArray"`
	SuggestionsResponse   SuggestionsResponse   `xml:"SuggestionsResponse"`
}

type GetUserPhotoRequest

type GetUserPhotoRequest struct {
	XMLName       struct{} `xml:"m:GetUserPhoto"`
	Email         string   `xml:"m:Email"`
	SizeRequested string   `xml:"m:SizeRequested"`
}

type GetUserPhotoResponse

type GetUserPhotoResponse struct {
	Response
	HasChanged  bool   `xml:"HasChanged"`
	PictureData string `xml:"PictureData"`
}

type GroupAttendeeConflictData

type GroupAttendeeConflictData struct {
	NumberOfMembers             int `xml:"NumberOfMembers"`
	NumberOfMembersAvailable    int `xml:"NumberOfMembersAvailable"`
	NumberOfMembersWithConflict int `xml:"NumberOfMembersWithConflict"`
	NumberOfMembersWithNoData   int `xml:"NumberOfMembersWithNoData"`
}

type HTTPError

type HTTPError struct {
	Status     string
	StatusCode int
}

func (HTTPError) Error

func (s HTTPError) Error() string

type IndexedPageItemView

type IndexedPageItemView struct {
	MaxEntriesReturned int       `xml:"MaxEntriesReturned,attr,omitempty"`
	Offset             int       `xml:"Offset,attr"`
	BasePoint          BasePoint `xml:"BasePoint,attr"`
}

type ItemAttachment added in v2.1.0

type ItemAttachment struct {
	AttachmentId     AttachmentId `xml:"t:AttachmentId,omitempty"`
	Name             string       `xml:"t:Name"`
	ContentType      string       `xml:"t:ContentType,omitempty"`
	ContentId        string       `xml:"t:ContentId,omitempty"`
	ContentLocation  string       `xml:"t:ContentLocation,omitempty"`
	Size             int64        `xml:"t:Size,omitempty"`
	LastModifiedTime string       `xml:"t:LastModifiedTime,omitempty"`
	IsInline         bool         `xml:"t:IsInline"`
}

type ItemId

type ItemId struct {
	Id        string `xml:"Id,attr"`
	ChangeKey string `xml:"ChangeKey,attr"`
}

type Items

type Items struct {
	Message      []Message      `xml:"t:Message"`
	CalendarItem []CalendarItem `xml:"t:CalendarItem"`
}

type Mailbox

type Mailbox struct {
	EmailAddress string `xml:"t:EmailAddress"`
}

type MailboxData

type MailboxData struct {
	Email            Email        `xml:"t:Email"`
	AttendeeType     AttendeeType `xml:"t:AttendeeType"`
	ExcludeConflicts bool         `xml:"t:ExcludeConflicts"`
}

type MailboxDataArray

type MailboxDataArray struct {
	MailboxData []MailboxData `xml:"t:MailboxData"`
}

type Message

type Message struct {
	ItemClass     string       `xml:"t:ItemClass,omitempty"`
	Subject       string       `xml:"t:Subject"`
	Body          Body         `xml:"t:Body"`
	Sender        OneMailbox   `xml:"t:Sender"`
	ToRecipients  XMailbox     `xml:"t:ToRecipients"`
	CcRecipients  *XMailbox    `xml:"t:CcRecipients,omitempty"`
	BccRecipients *XMailbox    `xml:"t:BccRecipients,omitempty"`
	Attachments   *Attachments `xml:"t:Attachments,omitempty"`
}

type MessageXml

type MessageXml struct {
	ExceptionType       string `xml:"ExceptionType"`
	ExceptionCode       string `xml:"ExceptionCode"`
	ExceptionServerName string `xml:"ExceptionServerName"`
	ExceptionMessage    string `xml:"ExceptionMessage"`
}

type MobilePhones

type MobilePhones struct {
	PhoneNumberAttributedValue PhoneNumberAttributedValue `xml:"PhoneNumberAttributedValue"`
}

type OfficeLocations

type OfficeLocations struct {
	StringAttributedValue StringAttributedValue `xml:"StringAttributedValue"`
}

type OneMailbox

type OneMailbox struct {
	Mailbox Mailbox `xml:"t:Mailbox"`
}

type ParentFolderId

type ParentFolderId struct {
	DistinguishedFolderId DistinguishedFolderId `xml:"t:DistinguishedFolderId"`
}

type People

type People struct {
	Persona []Persona `xml:"Persona"`
}

type Persona

type Persona struct {
	PersonaId            PersonaId            `xml:"PersonaId"`
	DisplayName          string               `xml:"DisplayName"`
	Title                string               `xml:"Title"`
	Department           string               `xml:"Department"`
	Departments          Departments          `xml:"Departments"`
	EmailAddress         EmailAddress         `xml:"EmailAddress"`
	RelevanceScore       int                  `xml:"RelevanceScore"`
	BusinessPhoneNumbers BusinessPhoneNumbers `xml:"BusinessPhoneNumbers"`
	MobilePhones         MobilePhones         `xml:"MobilePhones"`
	OfficeLocations      OfficeLocations      `xml:"OfficeLocations"`
}

type PersonaId

type PersonaId struct {
	Id string `xml:"Id,attr"`
}

type PersonaShape

type PersonaShape struct {
	BaseShape            BaseShape            `xml:"t:BaseShape,omitempty"`
	AdditionalProperties AdditionalProperties `xml:"t:AdditionalProperties,omitempty"`
}

type PhoneNumberAttributedValue

type PhoneNumberAttributedValue struct {
	Value Value `json:"Value"`
}

type Response

type Response struct {
	ResponseClass ResponseClass `xml:"ResponseClass,attr"`
	MessageText   string        `xml:"MessageText"`
	ResponseCode  string        `xml:"ResponseCode"`
	MessageXml    MessageXml    `xml:"MessageXml"`
}

type ResponseClass

type ResponseClass string
const (
	ResponseClassSuccess ResponseClass = "Success"
	ResponseClassWarning ResponseClass = "Warning"
	ResponseClassError   ResponseClass = "Error"
)

type ResponseMessage

type ResponseMessage struct {
	Response
	DescriptiveLinkKey int `xml:"DescriptiveLinkKey"`
}

type ResponseMessages

type ResponseMessages struct {
	CreateItemResponseMessage Response `xml:"CreateItemResponseMessage"`
}

type RoomLists

type RoomLists struct {
	Address []EmailAddress `xml:"Address"`
}

type SavedItemFolderId

type SavedItemFolderId struct {
	DistinguishedFolderId DistinguishedFolderId `xml:"t:DistinguishedFolderId"`
}

type SendEmailParams added in v2.1.0

type SendEmailParams struct {
	From     string
	To       []string
	Cc       []string
	Bcc      []string
	Subject  string
	Body     string
	BodyType string

	FileAttachments []AttachmentParams
}

type SoapError

type SoapError struct {
	Fault *Fault
}

func (SoapError) Error

func (s SoapError) Error() string

type StringAttributedValue

type StringAttributedValue struct {
	Value string `json:"Value"`
}

type Suggestion

type Suggestion struct {
	MeetingTime                 time.Time                   `xml:"MeetingTime"`
	IsWorkTime                  bool                        `xml:"IsWorkTime"`
	SuggestionQuality           string                      `xml:"SuggestionQuality"`
	ArrayOfAttendeeConflictData ArrayOfAttendeeConflictData `xml:"ArrayOfAttendeeConflictData"`
}

type SuggestionArray

type SuggestionArray struct {
	Suggestion []Suggestion `xml:"Suggestion"`
}

type SuggestionDayResult

type SuggestionDayResult struct {
	Date            time.Time       `xml:"Date"`
	DayQuality      string          `xml:"DayQuality"`
	SuggestionArray SuggestionArray `xml:"SuggestionArray"`
}

type SuggestionDayResultArray

type SuggestionDayResultArray struct {
	SuggestionDayResult []SuggestionDayResult `xml:"SuggestionDayResult"`
}

type SuggestionsResponse

type SuggestionsResponse struct {
	ResponseMessage          ResponseMessage          `xml:"ResponseMessage"`
	SuggestionDayResultArray SuggestionDayResultArray `xml:"SuggestionDayResultArray"`
}

type Time

type Time string

func (Time) ToTime

func (t Time) ToTime() (time.Time, error)

type TimeWindow

type TimeWindow struct {
	StartTime time.Time `xml:"t:StartTime"`
	EndTime   time.Time `xml:"t:EndTime"`
}

type TimeZone

type TimeZone struct {
	Bias         int          `xml:"t:Bias"`
	StandardTime TimeZoneTime `xml:"t:StandardTime"`
	DaylightTime TimeZoneTime `xml:"t:DaylightTime"`
}

type TimeZoneTime

type TimeZoneTime struct {
	Bias      int    `xml:"t:Bias"`
	Time      string `xml:"t:Time"`
	DayOrder  int16  `xml:"t:DayOrder"`
	Month     int16  `xml:"t:Month"`
	DayOfWeek string `xml:"t:DayOfWeek"`
	Year      string `xml:"Year,omitempty"`
}

type Value

type Value struct {
	Number string `json:"Number"`
	Type   string `json:"Type"`
}

type WorkingHours

type WorkingHours struct {
	TimeZone           TimeZone           `xml:"TimeZone"`
	WorkingPeriodArray WorkingPeriodArray `xml:"WorkingPeriodArray"`
}

type WorkingPeriod

type WorkingPeriod struct {
	DayOfWeek          string `xml:"DayOfWeek"`
	StartTimeInMinutes int    `xml:"StartTimeInMinutes"`
	EndTimeInMinutes   int    `xml:"EndTimeInMinutes"`
}

type WorkingPeriodArray

type WorkingPeriodArray struct {
	WorkingPeriod []WorkingPeriod `xml:"WorkingPeriod"`
}

type XMailbox

type XMailbox struct {
	Mailbox []Mailbox `xml:"t:Mailbox"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL