I praksis er det så og si ingen forskjell. Trenger du og bruke en ekstern SMTP server er vel hovedgrunnen at hosten har sperret for bruk av mail().
Bruker du mail() sender du egentlig mail til en smtp server som sender mail videre. Systemet heter sendmail ( i 97% av tilfellene ) og kjører som en prosess på webserveren. Når du ber mail() sende mail tar php og puller forespørslen videre til en sendmail prosess, "køer" denne i en pool og sender mailen så fort den har en ledighet til dette.
Bruker du en ekstern SMTP server kobler du deg opp mot en ekstern server, laster headere og tekst opp til denne for så og koble fra. Her brukes det mye data for å dytte info mellom script prosessen og smtp serveren.
Skal du derfor sende en haug med mail ( > 500 ) vil du derfor spare systemet for en haug med CPU og minne bruk ved og bruke mail() funksjonen. Datatrafikken er jo en ting, men et php script som henger igjen på grunn av store oppgaver er et helvete. (Det får du ved og bruke en ekstern SMTP server) De spiser CPU tråder og legger seg til å sove i minne. Det er fyfy hos mange hosts.
Håper dette forklarte litt