(ctx context.Context, to string, opts smtp.RcptOptions)
| 281 | } |
| 282 | |
| 283 | func (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) |
nothing calls this directly
no test coverage detected