MCPcopy Create free account
hub / github.com/foxcpp/maddy / AddRcpt

Method AddRcpt

internal/msgpipeline/msgpipeline.go:283–381  ·  view source on GitHub ↗
(ctx context.Context, to string, opts smtp.RcptOptions)

Source from the content-addressed store, hash-verified

281}
282
283func (dd *msgpipelineDelivery) AddRcpt(ctx context.Context, to string, opts smtp.RcptOptions) error {
284 if err := dd.checkRunner.checkRcpt(ctx, dd.d.globalChecks, to); err != nil {
285 return err
286 }
287 if err := dd.checkRunner.checkRcpt(ctx, dd.sourceBlock.checks, to); err != nil {
288 return err
289 }
290
291 originalTo := to
292
293 newTo, err := dd.globalModifiersState.RewriteRcpt(ctx, to)
294 if err != nil {
295 return err
296 }
297 dd.log.Debugln("global rcpt modifiers:", to, "=>", newTo)
298 resultTo := newTo
299 newTo = []string{}
300
301 for _, to = range resultTo {
302 var tempTo []string
303 tempTo, err = dd.sourceModifiersState.RewriteRcpt(ctx, to)
304 if err != nil {
305 return err
306 }
307 newTo = append(newTo, tempTo...)
308 }
309 dd.log.Debugln("per-source rcpt modifiers:", to, "=>", newTo)
310 resultTo = newTo
311
312 for _, to = range resultTo {
313 wrapErr := func(err error) error {
314 return exterrors.WithFields(err, map[string]interface{}{
315 "effective_rcpt": to,
316 })
317 }
318
319 rcptBlock, err := dd.rcptBlockForAddr(ctx, to)
320 if err != nil {
321 return wrapErr(err)
322 }
323
324 if rcptBlock.rejectErr != nil {
325 return wrapErr(rcptBlock.rejectErr)
326 }
327
328 if err := dd.checkRunner.checkRcpt(ctx, rcptBlock.checks, to); err != nil {
329 return wrapErr(err)
330 }
331
332 rcptModifiersState, err := dd.getRcptModifiers(ctx, rcptBlock, to)
333 if err != nil {
334 return wrapErr(err)
335 }
336
337 newTo, err = rcptModifiersState.RewriteRcpt(ctx, to)
338 if err != nil {
339 if err := rcptModifiersState.Close(); err != nil {
340 dd.log.Error("failed to close rcpt modifiers state", err)

Callers

nothing calls this directly

Calls 10

rcptBlockForAddrMethod · 0.95
getRcptModifiersMethod · 0.95
getDeliveryMethod · 0.95
WithFieldsFunction · 0.92
checkRcptMethod · 0.80
DebuglnMethod · 0.80
RewriteRcptMethod · 0.65
CloseMethod · 0.65
AddRcptMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected