제목 | Gmail SMTP 대량 메일 발송 시 에러에 대해 여쭤봅니다.. | ||
---|---|---|---|
카테고리 | 서버 | ||
글쓴이 | 멀바이자시가 | 작성시각 | 2021/01/06 14:34:19 |
|
|||
아주 기초적인 문제인 건 알고 있지만 혹 제가 놓치는게 있을까 싶어서 이렇게 글 올려 봅니다. 외부 웹서버에서 Crontab 을 이용하여 메일 발송을 하고 있습니다. 하루에 천 몇백건 정도 됩니다. 그런데 메일 발송하는 도중에 인증 문제로 멈춰버리는데 에러는 SMTP Error: Could not authenticate. 입니다. 위 에러로 검색해보면 참 많은 글이 있고 그에 해당되는 조치는 전부 해봤지만.. 역시나 중간에 끊기더군요. ( 3~4분 정도 발송하다가 위 에러를 4번정도 뱉어내고 멈춥니다. ) 조치는 1. 보안 수준이 낮은 앱의 액세스 : 사용 , 2. 전달 및 POP/IMAP 에서 IMAP 사용으로 설정 , 3. 내 Google 계정에 대한 액세스 허용 Gmail 계정은 유료 계정으로 라이선스가 있는 상태라서 일일전송 한도와 관련한 문제는 아닌 것 같습니다. 그리고 위 스케줄러와 상관없이 1건당 보내는 메일은 정상 발송되고 있습니다. 혹 제가 확인 할 수 있는 다른 방법을 아시거나 의견 주실 수 있으시면 어떤 답변이든 감사히 받겠습니다.
메일 발송 소스는 아주 많이 뿌려져 있지만 혹시나 해서 올려봅니다. foreach ($send_data as $key => $value) { $smtp_use = 'smtp-relay.gmail.com'; $this->load->library("Phpmailer"); $this->load->library("SMTP"); $mail = new PHPMailer(true); $mail->IsSMTP(); try { $mail->Host = $smtp_use; // email 보낼때 사용할 서버를 지정 $mail->SMTPAuth = true; // SMTP 인증을 사용함 $mail->Port = 465; // email 보낼때 사용할 포트를 지정 $mail->SMTPSecure = "ssl"; // SSL을 사용함 $mail->Username = $smtp_mail_id; // 계정 $mail->Password = $smtp_mail_pw; // 패스워드 $mail->SetFrom($from_email, $from_name); // 보내는 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능) $mail->AddAddress($to_email, $to_name); // 받을 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능) $mail->Subject = $title; // 메일 제목 $mail->MsgHTML($content); // 메일 내용 (HTML 형식도 되고 그냥 일반 텍스트도 사용 가능함) $mail->Send(); // 실제로 메일을 보냄 } catch (phpmailerException $e) { echo $e->errorMessage(); // 에러 로그 저장. // 여기서 에러 문구인 SMTP Error: Could not authenticate. 가 발생합니다. exit; } catch (Exception $e) { echo $e->getMessage(); exit; } } |
|||
다음글 | Mysql LEFT EXCLUSIVE에 대해서 (4) | ||
이전글 | 다운로드헬퍼 사용.카카오 인앱 브라우저. 파일 다운로드... (5) | ||
PureAni
/
2021/01/06 15:55:11 /
추천
0
|
멀바이자시가
/
2021/01/06 16:06:01 /
추천
0
└ PureAni 님. 말씀 감사합니다. 현재도 레디스 구조는 아니지만 메일 발송이 이루어지기전에 목록 추출하여 일반 테이블에 저장 후 약 5분 후 발송 cron이 실행되고 있습니다. 중간중간 로그를 남기긴 했지만 이렇다할 답을 찾기가 힘드네요.. ㅜㅜ 레디스도 한번 살펴봐야겠습니다. 조언 감사합니다.! |
PureAni
/
2021/01/06 16:10:42 /
추천
0
@멀바이자시가 이미 중간에 중계하고 계시다면, 한번에 발송되는 량을 조절하시는 방법밖에 없을거 같습니다. 100건 200건 300건 늘려보시면서 오류 없이 무난히 날라가는 시점을 찾아보세요. |
멀바이자시가
/
2021/01/06 16:28:14 /
추천
0
└ PureAni 님. 당장은 말씀 주신대로 건당 체크해보는 수 밖에 없을 듯 합니다. 정 안되면 50건씩이라도 잘라서 딜레이 주면서 순차 발송으로 해야겠네요.. 아예 발송 자체가 에러나면 차라리 나으련만.. 중간에 끊기니 난감하네요. 조언 감사드립니다~! 새해 복 많이 받으세요~! |
이메일을 어떻게 보내시는지 모르겠지만, 보통 대용량 전송의 경우 DB에 한번 저장했다가, cron 이 DB를 훑으면서 보냅니다.
만약 가운데에 중계(DB)해주는 것이 없다면, 중간에서 중계해주는것을 추가해서 시도하시면 될듯합니다.
보통은 DB에 많이 넣고, 요즘은 redis 같은것에 많이 넣는 추세입니다.