Laravel 기본 vendor를 이용하여 메일 전송하는 소스 입니다.

1. 메일 발송용 컨트롤러 생성

php artisan make:controller MailController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{
    /**
     * 메일 전송 소스 입니다. 테스트 용으로 하드코딩을 했습니다.
     *
     * @return string
     */
    public function send(Request $request)
    {
        $user = array(
            'email' => 'yourcount@gmail.com',
            'name'  => 'yourname'
        );

        $data = array(
            'detail'=> 'Your awesome detail here',
            'name'  => $user['name']
        );

        Mail::send('emails.welcome', $data, function($message) use ($user)
        {
            $message->from('master@betanews.net', 'Betanews Master');
            $message->to($user['email'], $user['name'])->subject('Welcome!');
        });

        return 'Done!';
    }
}

2. 메일용 폼 블레이드 php 파일 작성

위 소스에서 Mail::send() 함수의 첫번째 파람이 메일용 폼 블레이드 파일명입니다.

'emails.welcome' > resources/views/emails/welcome.blade.php 입니다.

Your sign up details are below:
{{ $detail }},
{{ $name}}

3. 기타 메일 설정 변경

.env 메일 설정 변경 혹은 config/mail.php를 직접 변경

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_id@gmail.com
MAIL_PASSWORD=app_password
MAIL_ENCRYPTION=tls

routes/api.php 추가 (메일 전송용 api 로 추가함)

Route::get('mail', 'MailController@send');

----

Gmail을 이용하여 메일을 전송하는 것이 간단하다고 생각을 하고 있었습니다. 하지만 소스만 정리한다고 되지 않네요. 과거 Google이 계정 강화를 위해서 보안 단계를 만들었는데, 여기에 웹 접근이 아닌 외부 앱으로 접근하는 경우를 대비해서 비밀번호를 별도 추가해서 관리하도록 했습니다.

메일 전송을 위한 앱용 비밀번호 추가 방법

먼저, 구글 계정(https://myaccount.google.com/) 페이지로 이동합니다. 먼저 앱 비밀번호를 설정하기 위해서 2단계 인증까지 설정을 완료하셔야 합니다. (기회가 닿으면 별도 내용도 정리를 해보겠습니다.)

보안 메뉴로 이동합니다.

보안 메뉴 > Google에 로그인 > 앱 비밀번호 항목을 선택합니다.

본인 확인을 위한 비밀번호를 재확인 합니다.

접속할 기기/장비의 비밀번호 생성을 위해 앱을 선택합니다.

저는 기타(맞춤 이름) 을 선택하여 별도 이름을 추가했습니다.

접근할 앱, 기기/장비 이름을 추가 후 [생성] 버튼을 클릭합니다.

팝업창이 뜨면서 "기기용 앱 비밀번호"를 생성하여 알려 줍니다. 해당 16자리 번호를 .env 파일의 MAIL_PASSWORD에 붙여넣기를 합니다.

다시 메일 전송을 하면 정상적으로 나올 것입니다.

혹시 Gmail로 메일 발송하시는 분들에게 도움이 되었으면 합니다. ^^


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Laravel에서 디자인 블레이드의 변수는 {{}}를 사용하는데, 이 내용은 AngularJS와 동일합니다. 해서 변수를 지정하는 "{{}}"변경하는 작업이 필요합니다.

var myApp = angular.module('MyApp', []).config(function($interpolateProvider) {

  $interpolateProvider.startSymbol('[[[');

  $interpolateProvider.endSymbol(']]]');

});

저는 {{}} 대신에 [[[ ]]]로 변경을 했습니다. [Shift]키를 한번이라도 덜 눌러 보려는 꼼수? 입니다. ^^;;



WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  2 , 댓글  0개가 달렸습니다.
secret

Google App Engine(이하 gae) 사용시 local mysql 연동에 문제가 좀 있더군요. 이리 저리 자료를 찾아서 정리를 했습니다.

파일다운로드 URL :
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

app.yaml 추가

libraries:

- name: MySQLdb
  version: "latest"

샘플 소스

import MySQLdb

CLOUDSQL_INSTANCE = '127.0.0.1' #localhost라고 하면 연결이 안되네요
DATABASE_NAME = 'database'
USER_NAME = 'root'
PASSWORD = '비밀번호'

def get_connection():
    kwargs = {
              'db': DATABASE_NAME,
              'user': USER_NAME,
              'passwd': PASSWORD,
              'port': 3306,
              'charset': 'utf8' #없으면 한글이 깨집니다.
              }

    return MySQLdb.connect(CLOUDSQL_INSTANCE, **kwargs)

class DbHandler(BaseHandler):
    def get(self):
        # Viewing guestbook
        conn = get_connection()
        cursor = conn.cursor()
        cursor.execute('SELECT idx, code, level FROM user_group '
                       'ORDER BY created_at DESC limit 20')
        rows = cursor.fetchall()
        conn.close()
        template_values = {"rows": rows}
        self.templates('test/test.html', **template_values);


app = webapp2.WSGIApplication([
    ('/db', DbHandler),
], debug=True)



WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  0 , 댓글  0개가 달렸습니다.
secret

새로운? framework 강자:
http://phalconphp.com/en/
설치방법 : http://www.jkun.net/422
phalcon with MAMP : http://dreamconception.com/tech/install-phalcon-with-mamp/


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  3 , 댓글  0개가 달렸습니다.
secret

카카오톡 연동 API :
https://github.com/HallaZzang/pykakao


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  0 , 댓글  0개가 달렸습니다.
secret
현재 개발 환경

MAMP + Laravel + Bootstrap Theme Metis

Laravel이 제공하는 laravel pagination 태그와 Metis Table 제공 pagination 태그가 틀립니다.

Metis pagination 태그 수정을 찾기 않고 일단 laravel 태그를 수정했습니다.

[Laravel 제공하는 태그가 bootstrap 표준이므로 수정을 취소합니다.]

/laravel/vendor/laravel/framework/src/Illuminate/Pagination/views/slider.php

[수정 전]

  <div class="pagination">
    <ul >
      <?php echo $presenter->render(); ?>
    </ul>
  </div>


[수정 후]

  <ul class="pagination">
    <?php echo $presenter->render(); ?>
  </ul>


Metis 수정할 경우를 찾아봐아겠네요.. ^^;; 문젠 어떤게 Bootstrap 표준으로 맞는지도 확인해봐야겠네요.


[Metis 스크립트를 수정합니다.]

수정파일 : /laravel/public/assets/lib/datatables/DT_bootstrap.js

            $(nPaging).append(
                    '<div class="pagination">' +
                    '<ul>' +
                    '<li class="prev disabled"><a href="#">&larr; ' + oLang.sPrevious + '</a></li>' +
                    '<li class="next disabled"><a href="#">' + oLang.sNext + ' &rarr; </a></li>' +
                    '</ul>' +
                    '</div>'
                    );

bootstrap.css의 pagination 부분도 bootstrap 원본을 참조하서 수정을 합니다. ^^;;

그럼 정상적으로 잘 돌아가네요.


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  0 , 댓글  1개가 달렸습니다.
  1. 일단 Bootstrap 표준은 Laravel에서 제공하는 pagination 이네요. 이녀석을 조정하는 방향으로 정리를 해야겠네요.. ㅠ,.ㅠ;;
secret

bootstrap은 이제 많이 알려진 상황이고, 개발자들이 관리자 페이지 하나 만들면 이제 어느 정도는 이녀석을 활용하려고 하는 것 같습니다.

문제는 활용은 한다고 하지만 modal 등 몇몇 문제가 있고, 무엇보다 눈이 높아진 디자인 이슈들에 비해 나의 UI 능력치는 부족하여... 어쩔 수 없이 이왕 빌려 쓰는 거 이쁜 건 없나 찾았지만, 대부분 유료네요. (금액은 얼마 되지 않습니다. 사서 쓰는 것을 강추합니다.)

하지만 개인적으로 사이트를 만들어 보고 있는 마당에 무슨 부귀영화를 누린다고 유료 테마를 사용하겠습니까? =_=;; (구글링으로 써치한 페이지 : http://bootstrapthemes.quora.com/Top-10-Bootstrap-Dashboard-Themes-For-Webmasters)

여기 무료 중에서 괜찮은 테마가 있어서 추천을 합니다.

공식 URL http://demo.onokumus.com/metis (글 작성 당시 버전Bootstrap 3.0.0 V2.1.1)

git 다운로드 주소https://github.com/onokumus/Bootstrap-Admin-Template


개인 수정로그

1. modernizr-build.min.js
    일부 css, js 파일 추가생성시 상대경로 assets 으로 생성이 되어서 하위 http://도메인/폴더/metis.html 같은 형태로 작업시 오류발생. 저는 /assets 로 절대 디렉토리로 바꾸는 작업을 했습니다.

2. js 디렉토리 추가
    일부 js 파일들이 있는 것처럼 보이나, 없음. 대표적인 것이 bootstrap도 없음
    추가된 디렉토리

bootstrap, cssbeauty, flot, font-awesome, magic, tablesorter, touch-punch

    (자세한 내용은 해당 홈페이지 참조 사이트들이 있으니, 거기에서 다운받으시면 됩니다.)

3. bootstrap.js 변경
   최신 버전이라고 해서 좋은 것은 아닌것 같네요. 일부 js 파일이 버전이 다릅니다. ㅠ,.ㅠ;; 해당 파일이 최신인 경우 메뉴 폴딩이 제대로 안되는 문제가 있어서 metis 서비스 중인 bootstrap.js로 바꿨습니다. 


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  0 , 댓글  2개가 달렸습니다.
  1. 좋은정보 감사합니다^^
    metis 디버깅을 하고 계시는 군요~
secret
MFC에서 현재 시간 구하는 방법입니다.


WRITTEN BY
비트센스
뷰파인더로 보는 프로그래머의 세상 페이스북 @bitsense 트위터 @picory 스카이프 picory MSN drawhalf@dreamwiz.com

트랙백  1 , 댓글  0개가 달렸습니다.
secret