I found a solution. I created a custom "Send an Email" apex page there a user can choose any of opportunity attachment and send it via email, for this functionality I have created an apex controller that can send an email with the  attachments.

Here is my solution, note the code is not refactored but functionality is doing what I need exactly,

Apex page:

<apex:page controller="EmailOpportunityAttachment">
    
<script type="text/javascript">

var delim = ";";
function lookupPick2(editPage, p2_lkid, p2, contactId, contactName, cas4, accountName, cas4_lkid, accountId, h){
    document.getElementsByClassName('p2')[0].value = contactName;
    document.getElementById('p2_lkid').value = contactId;
    closePopup();
}
function pickupValue(additionalToValue, ccValue, bccValue) {
    //var editPage = document.getElementsByClassName('editPage')[0];
    var p24 = document.getElementsByClassName('p24')[0];
    var p4 = document.getElementsByClassName('p4')[0];
    var p5 = document.getElementsByClassName('p5')[0];
    if(additionalToValue != '') {
        if (p24.value != '') {
            p24.value += delim;
        }
        p24.value += additionalToValue;
    }
    if(ccValue != '') {
        if (p4.value != '') {
            p4.value += delim;
        }
        p4.value += ccValue;
    }
    if(bccValue != '') {
        if (p5.value != '') {
           p5.value += delim;
        }
        p5.value += bccValue;
    }
    closePopup();
}

function openDocumentUpload(e) {
   setLastMousePosition(e);
   openPopup('/widg/filepicker_fs.jsp?lktp=015&mode=1&eid=00Yg0000000aN7g&utype=00P&omode=1&otype=2', 'doc', 450, 450, 'width=450,height=450,scrollbars=yes,toolbar=no,status=no,directories=no,menubar=no,resizable=1', true);
}
    
function attachPhxAttachment(e){
    var selector = document.getElementById('attS');
    var splt = selector.value.split('##');
    var id = splt[0];
    var size = splt[1];
    var tr = document.getElementById('tr_' + id);
    var fileStr = document.getElementById('fileStr');
    fileStr.innerHTML += tr.outerHTML;
    populateAttIds();
}
    
function populateAttIds(){    
    var hiddenDv = document.getElementsByClassName('attDvBlock')[0];
    var hiddenAttIds = hiddenDv.getElementsByClassName('hiddenAttIds');
    var inps = document.getElementsByClassName('attIds')[0];
    
    inps.value = '';   
    if(hiddenAttIds && hiddenAttIds.length > 0){
        for(var i=0; i < hiddenAttIds.length; i++){
            inps.value += hiddenAttIds[i].value + delim;
        }
    }
}    

function submitFormNoSave() {
    var nosave = document.getElementById('nosave');
    var save = document.getElementById('save');
    nosave.value = '1';
    save.value = 'nosave';
    submitForm();
}
    
function submitForm() {
    var editPage = document.getElementById('editPage');
    editPage.submit();
}
    
    function deletePhxAttachment(event) {
        if (window.confirm('Are you sure?')) {
            var elem = event.target.parentNode.parentNode;
            elem.parentNode.removeChild(elem);
            populateAttIds();
        }
    }
</script>
    
    <apex:sectionHeader title="Task" subtitle="Send an Email"/>

    <apex:form id="editPage" onsubmit="if (window.ffInAlert) { return false; }" styleClass="editPage">
 
        <input type="hidden" name="cancelURL" id="cancelURL" value="/{!opptyId}" />
        <input type="hidden" name="id" id="id" value="00Yg0000000aN7g" />
        <input type="hidden" name="docancel" id="docancel" value="0" />
        <input type="hidden" name="new_template" id="new_template" value="0" />
        <input type="hidden" name="nosave" id="nosave" value="0" />
        <input type="hidden" name="save" id="save" value="0" />
        <input type="hidden" name="retURL" id="retURL" value="/{!opptyId}" />
        <input type="hidden" name="rtype" id="rtype" value="003" />
        <input type="hidden" name="p2_lktp" id="p2_lktp" value="003" />
        <input type="hidden" name="p2_lkold" id="p2_lkold" value="" />
        <input type="hidden" name="p2_lkid" id="p2_lkid" value="" />
        <input type="hidden" name="p2_lspf" id="p2_lspf" value="0" />
        <input type="hidden" name="p2_lspfsub" id="p2_lspfsub" value="0" />
        <input type="hidden" name="p2_mod" id="p2_mod" value="0" />
        <input type="hidden" name="template_id" id="template_id" value="000000000000000" />
        
        <apex:pageblock id="mail" mode="edit"> 
            <apex:pageBlockButtons >                
                <apex:commandButton value="Send" action="{!sendEmail}" id="sendEmailBtn" />
                <input type="button" class="btn" value="Select Template" id="sendEmailBtn" />
                <input value="Attach File" class="btn" title="Attach File (New Window)" name="attach" onclick="openDocumentUpload(event)" type="button" />
                <input type="button" class="btn" value="Check Spelling" id="sendEmailBtn" />
                <input type="button" class="btn" value="Cancel" id="cancelBtn" />
            </apex:pageBlockButtons>
            
            <apex:pageblockSection>
                <apex:outputText styleClass="err" value="{!errorMsg}"/> 
                <apex:outputText styleClass="success" value="{!successMsg}"/> 
            </apex:pageblockSection>
            
            <apex:pageblockSection columns="1" title="Edit Email">
            
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="From" styleClass="bld"/>
                    <apex:outputpanel layout="block" styleClass="requiredInput">
                        <apex:outputpanel layout="block" styleClass="requiredBlock" />
                        <apex:selectList id="p26" value="{!ffrom}" size="1">
                            <apex:selectOptions value="{!contacts}"></apex:selectOptions>
                         </apex:selectList>
                    </apex:outputpanel>
                </apex:pageBlockSectionItem>

                <apex:pageBlockSectionItem>
                    <apex:outputLabel value="To:" styleClass="bld"/>
                    <apex:pageBlockSectionItem>
                    <apex:inputText  value="{!to}" maxlength="255" onchange="getElementByIdCS('p2_lkid').value='';getElementByIdCS('p2_mod').value='1';" size="20" styleClass="p2" />
                    <a href="javascript: openLookup('/_ui/common/data/LookupPage?lkfm=editPage&lknm=p2&lktp=' + getElementByIdCS('p2_lktp').value,670,'1','&lksrch=' + escapeUTF(getElementsByClassName('p2')[0].value.substring(0, 80)))" id="p2_lkwgt" onclick="setLastMousePosition(event)" title="To Lookup (New Window)">
                    <img src="/s.gif" alt="To Lookup (New Window)" class="lookupIconOn" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="To Lookup (New Window)" /></a>
                	</apex:pageBlockSectionItem>
                </apex:pageBlockSectionItem>
                
                <apex:pageblockSectionItem>
                    <apex:outputLabel value="Related To" styleClass="bld"/>
                    <apex:pageblockSectionItem>
                        <apex:selectList size="1" style="width: 250px">
                            <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                            <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                            <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                         </apex:selectList>
                         <apex:inputText maxlength="255" style="margin-left: 4px;" value="{!relatedTo}" />
                    </apex:pageblockSectionItem>
                    
                </apex:pageblockSectionItem>
           
                <apex:pageblockSectionItem >
                    <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p24_lkwgt" onclick="setLastMousePosition(event)" title="Additional To Lookup (New Window)">Aditional To:</apex:outputlink>
                    <apex:pageBlockSectionItem >
                        <apex:inputTextArea value="{!additionalTo}" cols="62" rows="2" styleClass="p24" />
                        <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p24_lkwgt" onclick="setLastMousePosition(event)" title="Additional To Lookup (New Window)">
                             <img src="/s.gif" alt="Additional To Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="Additional To Lookup (New Window)" />
                        </apex:outputlink>
                    </apex:pageBlockSectionItem>
                </apex:pageblockSectionItem>            
                
                <apex:pageblockSectionItem >
                    <apex:outputlink value="#" target="_blank">CC:</apex:outputlink>
                    <apex:pageBlockSectionItem >  
                        <apex:inputTextArea value="{!cc}" cols="62" id="p4" rows="2" title="CC" styleClass="p4" />              
                        <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p4_lkwgt" onclick="setLastMousePosition(event)" title="CC Lookup (New Window)">
                            <img src="/s.gif" alt="CC Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="CC Lookup (New Window)" />
                        </apex:outputlink>
                    </apex:pageBlockSectionItem>
                </apex:pageblockSectionItem>
               
                <apex:pageBlockSectionItem >
                    <apex:outputlink value="#" target="_blank">BCC:</apex:outputlink>
                    <apex:pageBlockSectionItem>
                        <apex:inputTextArea value="{!bcc}" cols="62" id="p5" rows="2" title="BCC" styleClass="p5" />                
                        <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p5_lkwgt" onclick="setLastMousePosition(event)" title="BCC Lookup (New Window)">
                            <img src="/s.gif" alt="BCC Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="BCC Lookup (New Window)" />
                        </apex:outputlink>
                    </apex:pageBlockSectionItem>
                </apex:pageBlockSectionItem>
                
                <apex:pageblockSectionItem >
                    <apex:outputLabel value="Subject" styleClass="bld"/>
                    <apex:outputpanel layout="block" styleClass="requiredInput">
                        <apex:outputpanel layout="block" styleClass="requiredBlock"/>
                        <apex:inputText value="{!subject}" maxlength="100" size="70"/>
                    </apex:outputpanel>    
                </apex:pageblockSectionItem>
                
                <apex:pageblockSectionItem >
                    <apex:outputLabel value="Message" styleClass="bld"/>
                    <apex:inputTextArea value="{!message}" rows="15" cols="93" richText="false"/>
                </apex:pageblockSectionItem>
                
            </apex:pageblockSection>
            
            <div id="test" style="width: 500px; margin: 20px 0 0 19%;">
                <select id="attS" name="attS" style="width: 400px;">
                    <apex:repeat value="{!attachments}" var="att" id="theRepeat">
                        <option value="{!att.Id}##{!att.BodyLength}">{!att.Name}</option>
                    </apex:repeat>
                </select>
               <input value="Attach File" class="btn" id="attachFile" name="attachFile" onclick="attachPhxAttachment(event)" type="button" />
               <div style="margin: 10px 0 0 0;">
                   <input style="display:none;" value="Attach File" class="btn" title="Attach File (New Window)" id="attach" name="attach" onclick="openDocumentUpload(event)" type="button" />
               </div>
           </div>
        </apex:pageblock> 

    

<div class="bRelatedList">
<!-- Begin ListElement -->

<!-- motif: Home -->

<!-- WrappingClass -->
<div class="listRelatedObject homeBlock">
    <div class="bPageBlock brandSecondaryBrd secondaryPalette">
        <div class="pbHeader">
            <table border="0" cellpadding="0" cellspacing="0"><tbody>
                <tr>
                    <td class="pbTitle">
                        <img src="/s.gif" alt="" width="12" height="1" class="minWidth" title="" style="margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;" />
                        <h3>Attachments</h3>
                    </td>
                    <td class="pbButton">
                        <input value="Attach File" class="btn" name="attach" onclick="openDocumentUpload(event)" title="Attach File (New Window)" type="button" />
                    </td>
                    <td class="pbHelp">&nbsp;</td>
                </tr>
                </tbody>
            </table>
        </div>
        <div class="pbBody attDvBlock">
            <table class="list" border="0" cellspacing="0" cellpadding="0">
                <tbody id="fileStr">
                <tr class="headerRow">
                    <th class="actionColumn" scope="col">Action</th>
                    <th scope="col" class=" zen-deemphasize">File</th>
                    <th scope="col" class=" zen-deemphasize">Size</th>
                </tr>
                </tbody>
            </table>
        </div>
        <div class="pbFooter secondaryPalette">
            <div class="bg"></div>
        </div>
    </div>
</div>
            <div class="listElementBottomNav"></div>
                <!-- End ListElement -->
</div>
        
        <div class="hiddenDv" style="display:none !important;"> 
            <table class="list" border="0" cellspacing="0" cellpadding="0">
                <tbody>
                <apex:repeat value="{!attachments}" var="att2" id="trFileRepeat">                
                    <tr id="tr_{!att2.Id}" class="dataRow even last first highlight" onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onmouseover="if (window.hiOn){hiOn(this);}">
                        <td class="actionColumn">
                            <a href="javascript:;" class="actionLink" onclick="deletePhxAttachment(event)">Del</a>
                        </td>
                        <th scope="row" class=" dataCell  ">
                            <a href="/servlet/servlet.FileDownload?file={!att2.Id}" target="_TOP">{!att2.Name}</a>
                            <input type="hidden" value="{!att2.Id}" class="hiddenAttIds" />
                        </th>
                        <td class=" dataCell  ">{!att2.BodyLength} bytes</td>
                    </tr> 
                </apex:repeat>
                </tbody>
            </table>
        </div>
        <apex:inputText value="{!attachmentIds}" styleClass="attIds" style="" />
    </apex:form>
 </apex:page>
 
 Apex controller:
 
 public class EmailOpportunityAttachment{

 	public String to {get;set;}
    public String additionalTo {get;set;}
    public String relatedTo {get;set;}
    public String cc {get;set;}
    public String bcc {get;set;}
    public String ffrom {get;set;}
    public String message {get;set;}
    public String subject {get;set;}
    public String errorMsg{get;set;} 
    public String successMsg{get;set;}
    public List<String> addresses {get;set;}
    public String opptyId {get;set;}
    public String accountId {get;set;}
    public String attachmentIds {get;set;}
    public boolean flagToSendMail;
    private static final String DEL = ';';
        
  
    public EmailOpportunityAttachment(){
        this.opptyId = ApexPages.currentPage().getParameters().get('opptyId');
        this.accountId = ApexPages.currentPage().getParameters().get('accountId');
    }

    public List<SelectOption> contacts {
        get {
            List<SelectOption> contacts = new List<SelectOption>();
            List<Contact> cnts = [select Id, Name, Email from Contact where Account.Id =: this.accountid];
            for (Contact cnt: cnts) {
                contacts.add(new SelectOption(cnt.Id, '"' + cnt.Name + '" <' + cnt.Email + '>'));
            }
        return contacts;
        }
        set;
    }

    
    public Attachment[] getAttachments(){
      return  [select id, Name, BodyLength, Body from Attachment where parent.id =: this.opptyId];
    }
    
    public List<Attachment> getAttachmentsByIds(final String[] ids){
        String sql = ' select Id, Name, Body, ContentType from Attachment where Name=\'DDDDDDDDDDDDDD\' ';
        boolean found = false;
        if(null != ids && ids.size() > 0){
            for(String id: ids){
             	sql += ' OR Id=';
                sql += '\'';
                sql += id;
                sql += '\'';
            }            
            found = true;
        }
        //System.debug(sql);
        return found ? (List<Attachment>)Database.query(sql) : null;
    }
    
    
    public String getEmailByUserName(final String userName){
      return [select Email from Contact where Name =: userName limit 1].Email;
    }

    public PageReference sendEmail() {
        PageReference pageRef = new PageReference('/'+this.opptyId);
                
        if(subject == '' || message == ''){
            errorMsg = 'Please enter subject and message.';
            return null;
        }
        
        if(to != '' || additionalTo != '' || cc != '' || bcc != ''){
            List<String> toAddresses = new List<String>();
            List<String> ccAddresses = new List<String>();
            List<String> bccAddresses = new List<String>();
    
            List<String> tmpAddr = new List<String>();
            if(additionalTo.contains(DEL)){
                toAddresses = additionalTo.split(DEL);
                for(String tmp:toAddresses){
                    tmpAddr.add(tmp);
                }
            }else if(additionalTo != '') {
                toAddresses.add(additionalTo);
                tmpAddr.add(additionalTo);
            }
            
            if(to != ''){
                final String emailAddr = getEmailByUserName(to);
                toAddresses.add(emailAddr);
                tmpAddr.add(emailAddr);
            }
            
            if(cc.contains(DEL)){
                ccAddresses = cc.split(DEL);
                for(String tmp:ccAddresses){
                    tmpAddr.add(tmp);
                }
            }else if(cc != ''){
                ccAddresses.add(cc);
                tmpAddr.add(cc);
            }
            if(bcc.contains(DEL)){
                bccAddresses = bcc.split(DEL);
                for(String tmp:bccAddresses){
                    tmpAddr.add(tmp);
                }
            }else if(bcc != ''){
                bccAddresses.add(bcc);
                tmpAddr.add(bcc);
            }
    
            /* Checking whether mail ids are valid */
            addresses = tmpAddr;
            for(String tempStr:addresses){
                if(!Pattern.matches('[a-zA-Z0-9._-]+@[a-zA-Z]+.[a-zA-Z]{2,4}', tempStr)){
                    errorMsg = 'Check To, CC and BCC addresses';
                    successMsg = '';
                    flagToSendMail = false;      
                    break;          
                }else{
                    flagToSendMail = true;
                }           
            } 
    
            /* Sending Mail */
            if(flagToSendMail == true){
                Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
                if(toAddresses != null){
                    email.setToAddresses(toAddresses);
                }
                if(ccAddresses != null){
                    email.setccAddresses(ccAddresses);
                }
                if(bccAddresses != null){
                    email.setbccAddresses(bccAddresses);
                }             
                email.setSubject(subject);  
                email.setHtmlBody(message);
                
                List<Messaging.EmailFileAttachment> attachs = null;
                
                if('' != attachmentIds){
                    final String[] attachIds = attachmentIds.split(DEL);
                    if(null != attachIds && attachIds.size() > 0){
                       final List<Attachment> attechments = getAttachmentsByIds(attachIds);
                        if(null != attechments && attechments.size() > 0){
                            attachs = new List<Messaging.EmailFileAttachment>();
                            Messaging.EmailFileAttachment attach = null;
                            for(Attachment att: attechments){
                                attach = new Messaging.EmailFileAttachment();
                                attach.setContentType(att.contentType);
                                attach.setFileName(att.Name);
                                attach.setInline(false);
                                attach.setBody(att.Body);
                                attachs.add(attach);
                                attach = null;
                            }
                        }                        
                    }
                }
         
                if(null != attachs && attachs.size() > 0){
                    email.setFileAttachments(attachs);
                }
                                
                Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
    
                errorMsg = '';
                successMsg = 'Mail sent successfully to following recipients';
                return pageRef; 
            }else{
                return null;
            }
        }else{
            errorMsg = 'Please enter To or CC or BCC address';
            return null;
        }
    }

}