Cara suas perguntas me fizeram chegar no problema mas de qualquer forma vou responder todas até pra chegarmos numa solução mais específica:
"Foi analisado os logs do resend? Esta dando algum erro?" R: Analisei o log do resend e não tem nada, nenhum erro lá, é como se ele nem tivesse chegado a ser enviado pra lá.
"(como @Ytu sabiamente apontou) O domínio de produção está verificado? (lembrando que o domínio delivered@resend.dev é só para testes)" R: O domínio está configurado corretamente e eu alterei esse cara aí pro domínio correto.
"O token de acesso do resend esta com permissão para o domínio em questão e para a função de envio?" R: Sim, tudo configurado conforme a documentação do resend e o domínio também está configurado corretamente para comunicar com o resend.
"O NextAuth tem a própria abstração de envio de email de validação, se você estiver fazendo através dele, pode ter faltado um configuração de url de envio para a produção (tem um exemplo nas docs do Resend)" R: Estou fazendo por fora, no momento de armazenar os dados do usuário no banco eu também gero o token que será enviado por email e faço a requisição da rota "/api/send".
"[Improvável] Se estiver disparando o email atráves de um api route do Next usando Server Components, lembre de que a rota deve ser informada por completo, incluindo o host (Ex: https://myapp.vercel.app/email/verification)" R: Estou passando a rota completa, pego a env NEXT_PUBLIC_URL juntamente com a /api/send no momento do fetch.
"[Improvável] O email pode estar caindo em spam ou na pasta de promoções (aconteceu comigo :c)" R: Ele nem está sendo disparado.
"Foi analisado os logs da vercel? Esta dando algum erro?" R: Analisando esse carinha aqui, eu recebi o seguinte erro [POST] /api/send reason=EDGE_FUNCTION_INVOCATION_FAILED, status=500, user_error=true
Show de bola, nesse caso um try/catch fazendo o console.log do erro pode resolver o mistério. A vercel mostra o console.log nos logs deles na plataforma.
A única resposta que ainda me deixou em dúvida foi a respeito do host usado na requisição do api route do next. Você disse que esta usando - corretamente - a variável NEXT_PUBLIC_URL, mas o protocolo (http ou https) esta sendo corretamente definido também? Isso foi um erro que cometi nas minhas primeiras tentativas de implementação, pois em dev seria http, mas em prod precisa ser https (usei o NODE_ENV para decidir nesse caso).