도메인만 있으면 자신만의 메일 주소를 가질 수 있는 Google Apps을 정리 한다.
sendmail 등을 설치 한다.
#--- 환경 폴더: /etc/mail
#--- 설치 폴더: /usr/share/sendmail
apt-get install sendmail
apt-get install sasl2-bin
apt-get install sendmail-cf
OpenSSL을 사용하여 sendmail에서 사용할 개인키와 공개키를 생성를 생성 한다.
sendmail 인증 정보를 생성 한다.
cd /etc/mail
mkdir auth
cd auth
vi /etc/mail/auth/authinfo
AuthInfo:smtp.gmail.com "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호](Gmail비밀번호.md)"
#---인증 파일의 hashdb(authinfo.db)를 생성 한다.
makemap hash authinfo < authinfo
#--- 인증파일경로의 퍼미션을 설정 한다.
chmod 700 /etc/mail/auth
chmod 600 /etc/mail/auth/*
vi /etc/mail/sendmail.mc
include('/etc/mail/sasl/sasl.m4')dnl #--- Ubuntu Server에서만 추가
FEATURE(authinfo,hash /etc/mail/auth/authinfo)dnl
define('SMART_HOST','smtp.gmail.com')dnl
define('RELAY_MAILER_ARGS', 'TCP $h 587')dnl
define('ESMTP_MAILER_ARGS', 'TCP $h 587')dnl
define('confCACERT_PATH', '/etc/mail/certs')dnl
define('confCACERT', '/etc/mail/certs/CAcert.pem')dnl
define('confSERVER_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confSERVER_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confCLIENT_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confCLIENT_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define('confAUTH_OPTIONS', 'A')dnl
#--- 아래 라인 위에 추가 한다.
MAILER(smtp)dnl
sendmail.cf 생성
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
service sendmail restart
cd /etc/mail
make
#--- 필요한 경우 sendmail의 설정을 재 생성 한다. sendmailconfig
/etc/init.d/sendmail start ```
php.ini 설정
sendmail_path = /usr/sbin/sendmail -t
[메일 송수신 확인](HMail_Server_4.4.1.md#메일 송수신 확인.md)
[[CentOS]] 5.5 버전에서 sendmail을 사용하여 Gmail을 연동하여 보자.
sendmail 설치
yum install openssl sendmail sendmail-cf
yum install cyrus-sasl cyrus-sasl-plain
sendmail이 TLS 또는 SSL을 지원하는지 확인 한다.
#--- STARTTLS와 SASLv2가 있는지 확인
sendmail -d0.1 -bv root
SASL 2.1.21 이상을 지원하는지 확인 한다.
yum list | grep sasl
OpenSSL을 사용하여 sendmail에서 사용할 개인키와 공개키를 생성를 생성 한다.
sendmail 인증 정보를 생성 한다.
cd /etc/mail
mkdir auth
cd auth
vi /etc/mail/auth/authinfo
AuthInfo:smtp.gmail.com "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호](Gmail비밀번호.md)"
### AuthInfo:smtp.gmail.com "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호](Gmail비밀번호.md)" "M:PLAIN"
### AuthInfo:smtp.gmail.com:587 "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호](Gmail비밀번호.md)" "M:PLAIN"
#---인증 파일의 hashdb(authinfo.db)를 생성 한다.
makemap hash authinfo < authinfo
#--- 인증파일경로의 퍼미션을 설정 한다.
chmod 700 /etc/mail/auth
chmod 600 /etc/mail/auth/*
vi /etc/mail/sendmail.mc
include('/etc/mail/sasl/sasl.m4')dnl #--- Ubuntu Server에서만 추가
FEATURE(authinfo,hash /etc/mail/auth/authinfo)dnl
define('SMART_HOST','smtp.gmail.com')dnl
define('RELAY_MAILER_ARGS', 'TCP $h 587')dnl
define('ESMTP_MAILER_ARGS', 'TCP $h 587')dnl
define('confCACERT_PATH', '/etc/mail/certs')dnl
define('confCACERT', '/etc/mail/certs/CAcert.pem')dnl
define('confSERVER_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confSERVER_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confCLIENT_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confCLIENT_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define('confAUTH_OPTIONS', 'A')dnl
#--- 아래 라인 위에 추가 한다.
MAILER(smtp)dnl
sendmail.cf 생성
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
service sendmail restart
cd /etc/mail
make
#--- 필요한 경우 sendmail의 설정을 재 생성 한다. sendmailconfig
/etc/init.d/sendmail start ```
최종 확인
echo '/map authinfo AuthInfo:smtp.gmail.com' | /usr/sbin/sendmail -bt
echo "this is a test" | sendmail -s aaa@test.co.kr
#--- aaa@test.co.kr 메일함에서 메일을 확인 한다.
방화벽에서 587, 465 port를 개방 한다.
system-config-securitylevel
기타 sendmail 설정
makemap hash /etc/mail/access.db < /etc/mail/access
vi /etc/mail/local-host-names
showinfo_sendmail.bash
#!/bin/bash
echo 'sendmail 버전 : sendmail 8.13.8'
echo '환경 파일 : vi /etc/mail/sendmail.mc'
echo '기동 종료 : service sendmail restart'
echo '서비스 확인 : ps -ef | grep sendmail | grep -v grep'
php.ini 설정
sendmail_path = /usr/sbin/sendmail -t
Eclipse에서 [http://code.google.com/intl/ko-KR/apis/gdata/javadoc/ Google Data(GData) APIs Client Library]를 사용할 수 있는 개발 환경을 구성 한다.
{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- |width="30%" align="center" style="background-color:#eee;"|Google Apps |width="70%"|
Two-legged OAuth를 사용하여 Google Calendar에 접속하는 사례
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters; import com.google.gdata.client.authn.oauth.OAuthException; import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer; import com.google.gdata.client.authn.oauth.OAuthParameters.OAuthType; import com.google.gdata.client.calendar.CalendarService; import com.google.gdata.data.calendar.CalendarEntry; import com.google.gdata.data.calendar.CalendarFeed; import com.google.gdata.util.ServiceException;
//--- http://code.google.com/intl/ko-KR/apis/gdata/docs/auth/oauth.html public class Calendar { private static String CONSUMER_KEY = "xxxx"; private static String CONSUMER_SECRET = "xxxx"; private static String userID = "xxxx"; //--- Google Apps 사용자의 로그인 아이디 (@앞의 것)
public static void main(String[](.md) args) {
GoogleOAuthParameters oauthParams = null;
CalendarService calendar = null;
URL metafeedUrl = null;
CalendarFeed resultFeed = null;
oauthParams = new GoogleOAuthParameters();
oauthParams.setOAuthConsumerKey(CONSUMER_KEY);
oauthParams.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParams.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
calendar = new CalendarService("My Application");
try {
calendar.setOAuthCredentials(oauthParams, new OAuthHmacSha1Signer());
metafeedUrl = new URL("http://www.google.com/calendar/feeds/default/allcalendars/full?xoauth_requestor_id=" + userID + "@" + CONSUMER_KEY);
resultFeed = calendar.getFeed(metafeedUrl, CalendarFeed.class);
} catch (OAuthException e1) {
e1.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
List entries = resultFeed.getEntries();
for (int i = 0;i < entries.size();i++) {
CalendarEntry entry = entries.get(i);
System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println("\nTotal Entries: "+entries.size());
} } ```
참고 문헌