E-posta gönderme
Şimdi ya da daha sonra tek bir ileti, eklerle birlikte, ya da tek istekte yüz ileti.
Bir ileti gönderme
sent, err := client.Emails.Send(ctx, openemail.Body{ "from": "Acme Billing <[email protected]>", "to": []string{"[email protected]", "[email protected]"}, "replyTo": "[email protected]", "subject": "Your September invoice", "html": "<p>The invoice is attached.</p>", "text": "The invoice is attached.", "tags": openemail.Body{"invoice": "inv_2026_09_4192"},})if err != nil { return err} fmt.Println(sent.ID(), sent.String("status"))to, cc ve bcc tek bir adres ya da bir liste alır; adres ise Ada <[email protected]> gibi bir metin ya da email ve name içeren bir map'tir. Gövde html ve text alanlarından, kayıtlı bir template değerinden ya da bir draftId değerinden gelir.
Her gönderim bir idempotency anahtarı taşır. İstemci her çağrı için bir tane üretir ve yeniden denerken onu yeniden kullanır, böylece yeniden denenen bir istek ilk iletiyi yineler. Bunun süreçler ve yeniden başlatmalar arasında da geçerli olması için openemail.WithIdempotencyKey geçirin.
Ekler
invoice, err := os.ReadFile("invoice.pdf")if err != nil { return err} _, err = client.Emails.Send(ctx, openemail.Body{ "from": "[email protected]", "to": "[email protected]", "subject": "Your September invoice", "text": "The invoice is attached.", "attachments": []openemail.Body{ {"filename": "invoice.pdf", "content": invoice, "contentType": "application/pdf"}, {"fileId": "file_3f9c2a7b1e4d8f60a5c7b92d"}, },}) return errcontent, istemcinin base64 olarak kodladığı bir []byte ya da bir io.Reader alır, ya da zaten base64 olan bir metin alır. fileId, client.Files.Upload ile yüklenmiş bir dosyayı adlandırır; 5 MB'tan büyük bir dosya bu şekilde gönderilir.
Daha sonra gönderme
scheduled, err := client.Emails.Send(ctx, openemail.Body{ "from": "[email protected]", "to": "[email protected]", "subject": "Your invoice is due tomorrow", "text": "A reminder that the invoice is due tomorrow.", "scheduledAt": time.Now().Add(24 * time.Hour),})if err != nil { return err} if _, err := client.Emails.Reschedule(ctx, scheduled.ID(), time.Now().Add(48*time.Hour)); err != nil { return err} cancelled, err := client.Emails.Cancel(ctx, scheduled.ID())if err != nil { return err} fmt.Println(cancelled.String("status"))scheduledAt bir time.Time, bir ISO 8601 anı ya da PT1H gibi bir süre alır. Bir gövdenin herhangi bir yerindeki time.Time, UTC olarak bir ISO 8601 anı biçiminde gönderilir. Zamanlanmış bir ileti, gidene kadar değiştirilebilir ya da iptal edilebilir.
Toplu gönderim
result, err := client.Emails.SendBatch(ctx, []openemail.Body{ {"from": "[email protected]", "to": "[email protected]", "subject": "Order AC-4192 has shipped", "text": "It is on its way."}, {"from": "[email protected]", "to": "[email protected]", "subject": "Order AC-4193 has shipped", "text": "It is on its way."},})if err != nil { return err} fmt.Println(result.Sent, "sent,", result.Failed, "failed") for _, item := range result.Items { if item.String("status") == "error" { fmt.Println(item.Int("index"), item.Object("error").String("message")) }}Bir toplu gönderim en çok 100 ileti alır ve asla ya hep ya hiç değildir: hatalı bir adres yalnızca kendi öğesini başarısız kılar, geri kalanı yine de gider. Bir hataya güvenmek yerine Failed değerini ve her öğenin status değerini denetleyin.