(ctx context.Context, in *AddressParam)
| 162 | } |
| 163 | |
| 164 | func (s *Server) handleTestSend(ctx context.Context, in *AddressParam) (*sendOutput, error) { |
| 165 | ag, err := s.resolveOwnedAgent(ctx, in.Address) |
| 166 | if err != nil { |
| 167 | return nil, err |
| 168 | } |
| 169 | user, uerr := s.requireUser(ctx) |
| 170 | if uerr != nil { |
| 171 | return nil, uerr |
| 172 | } |
| 173 | if env := s.checkSendLimit(ag.ID); env != nil { |
| 174 | return nil, env |
| 175 | } |
| 176 | if !ag.DomainVerified { |
| 177 | return nil, NewError(http.StatusForbidden, "domain_not_verified", "agent domain must be verified before sending test email") |
| 178 | } |
| 179 | if s.deps.EnforceMessageSend != nil { |
| 180 | if err := s.deps.EnforceMessageSend(ctx, user.ID); err != nil { |
| 181 | if env, ok := limitEnvelope(err); ok { |
| 182 | return nil, env |
| 183 | } |
| 184 | return nil, NewError(http.StatusInternalServerError, "internal_error", "limits check failed") |
| 185 | } |
| 186 | } |
| 187 | if s.deps.SendTest == nil { |
| 188 | return nil, NewError(http.StatusInternalServerError, "internal_error", "test send unavailable") |
| 189 | } |
| 190 | res, derr := s.deps.SendTest(ctx, ag) |
| 191 | if derr != nil { |
| 192 | return nil, NewError(derr.Status, derr.Code, derr.Msg) |
| 193 | } |
| 194 | if res.Held { |
| 195 | return &sendOutput{Status: http.StatusAccepted, Body: SendResultView{Status: "pending_review", MessageID: res.PendingMessageID, ApprovalExpiresAt: res.ApprovalExpiresAt}}, nil |
| 196 | } |
| 197 | return &sendOutput{Status: http.StatusOK, Body: SendResultView{Status: "sent", MessageID: res.MessageID, ProviderMessageID: res.ProviderMessageID, SentAs: res.SentAs, Method: res.Method}}, nil |
| 198 | } |
| 199 | |
| 200 | // ReplyRequest mirrors the legacy reply body. |
| 201 | type ReplyRequest struct { |
nothing calls this directly
no test coverage detected